{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "38bc2d85-ad14-49f5-a6af-5b4431d9c1b1",
   "metadata": {},
   "source": [
    "# 结果统计与可视化\n",
    "本文件对得到的结构预测结果进行指标统计和可视化。\n",
    "## 计算 TM-score\n",
    "下面的代码从每一对预测结果和实验结果中计算 TM-score。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "1e16d527-f037-4723-93de-856dae309db3",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "处理完成: 170L_A_1.pdb -> TM2 Score: 0.8673\n",
      "处理完成: 10GS_B_2.pdb -> TM2 Score: 0.9929\n",
      "处理完成: 188L_A_1.pdb -> TM2 Score: 0.9162\n",
      "处理完成: 157L_A_1.pdb -> TM2 Score: 0.9611\n",
      "处理完成: 125L_A_1.pdb -> TM2 Score: 0.9484\n",
      "处理完成: 168L_B_5.pdb -> TM2 Score: 0.8285\n",
      "处理完成: 110M_A_1.pdb -> TM2 Score: 0.9901\n",
      "处理完成: 194L_A_1.pdb -> TM2 Score: 0.9945\n",
      "处理完成: 169L_B_5.pdb -> TM2 Score: 0.9581\n",
      "处理完成: 118L_A_1.pdb -> TM2 Score: 0.9612\n",
      "处理完成: 105M_A_1.pdb -> TM2 Score: 0.9733\n",
      "处理完成: 112M_A_1.pdb -> TM2 Score: 0.9899\n",
      "处理完成: 18GS_A_2.pdb -> TM2 Score: 0.9911\n",
      "处理完成: 106M_A_1.pdb -> TM2 Score: 0.9915\n",
      "处理完成: 12E8_L_2.pdb -> TM2 Score: 0.8608\n",
      "处理完成: 145L_A_1.pdb -> TM2 Score: 0.8936\n",
      "处理完成: 11BA_A_2.pdb -> TM2 Score: 0.8202\n",
      "处理完成: 144L_A_1.pdb -> TM2 Score: 0.94\n",
      "处理完成: 107M_A_1.pdb -> TM2 Score: 0.9913\n",
      "处理完成: 14GS_B_2.pdb -> TM2 Score: 0.9234\n",
      "处理完成: 109L_A_1.pdb -> TM2 Score: 0.9488\n",
      "处理完成: 168L_D_5.pdb -> TM2 Score: 0.8491\n",
      "处理完成: 12E8_P_2.pdb -> TM2 Score: 0.7977\n",
      "处理完成: 107L_A_1.pdb -> TM2 Score: 0.9511\n",
      "处理完成: 158L_A_1.pdb -> TM2 Score: 0.9267\n",
      "处理完成: 115L_A_1.pdb -> TM2 Score: 0.9932\n",
      "处理完成: 177L_A_1.pdb -> TM2 Score: 0.981\n",
      "处理完成: 103M_A_1.pdb -> TM2 Score: 0.9921\n",
      "处理完成: 17GS_B_2.pdb -> TM2 Score: 0.9981\n",
      "处理完成: 135L_A_1.pdb -> TM2 Score: 0.988\n",
      "处理完成: 126L_A_1.pdb -> TM2 Score: 0.9292\n",
      "处理完成: 122L_A_1.pdb -> TM2 Score: 0.9606\n",
      "处理完成: 113L_A_1.pdb -> TM2 Score: 0.9446\n",
      "处理完成: 10GS_A_2.pdb -> TM2 Score: 0.9929\n",
      "处理完成: 15C8_L_1.pdb -> TM2 Score: 0.9024\n",
      "处理完成: 121P_A_1.pdb -> TM2 Score: 0.9827\n",
      "处理完成: 196L_A_1.pdb -> TM2 Score: 0.9927\n",
      "处理完成: 169L_A_5.pdb -> TM2 Score: 0.9098\n",
      "处理完成: 120L_A_1.pdb -> TM2 Score: 0.9452\n",
      "处理完成: 192L_A_1.pdb -> TM2 Score: 0.8649\n",
      "处理完成: 166L_A_1.pdb -> TM2 Score: 0.9925\n",
      "处理完成: 123L_A_1.pdb -> TM2 Score: 0.9517\n",
      "处理完成: 147L_A_1.pdb -> TM2 Score: 0.9222\n",
      "处理完成: 161L_A_1.pdb -> TM2 Score: 0.9598\n",
      "处理完成: 168L_C_5.pdb -> TM2 Score: 0.9139\n",
      "处理完成: 103L_A_1.pdb -> TM2 Score: 0.9087\n",
      "处理完成: 189L_A_1.pdb -> TM2 Score: 0.9851\n",
      "处理完成: 153L_A_1.pdb -> TM2 Score: 0.9925\n",
      "处理完成: 159L_A_1.pdb -> TM2 Score: 0.9935\n",
      "处理完成: 139L_A_1.pdb -> TM2 Score: 0.9116\n",
      "处理完成: 150L_B_4.pdb -> TM2 Score: 0.9151\n",
      "处理完成: 195L_A_1.pdb -> TM2 Score: 0.9556\n",
      "处理完成: 148L_E_1.pdb -> TM2 Score: 0.8648\n",
      "处理完成: 190L_A_1.pdb -> TM2 Score: 0.993\n",
      "处理完成: 12AS_A_2.pdb -> TM2 Score: 0.9851\n",
      "处理完成: 16GS_B_2.pdb -> TM2 Score: 0.9922\n",
      "处理完成: 142L_A_1.pdb -> TM2 Score: 0.8944\n",
      "处理完成: 101M_A_1.pdb -> TM2 Score: 0.9909\n",
      "处理完成: 12E8_M_2.pdb -> TM2 Score: 0.914\n",
      "处理完成: 11BA_B_2.pdb -> TM2 Score: 0.8223\n",
      "处理完成: 130L_A_1.pdb -> TM2 Score: 0.9402\n",
      "处理完成: 174L_B_2.pdb -> TM2 Score: 0.8764\n",
      "处理完成: 13PK_D_4.pdb -> TM2 Score: 0.8781\n",
      "处理完成: 131L_A_1.pdb -> TM2 Score: 0.9577\n",
      "处理完成: 11AS_A_2.pdb -> TM2 Score: 0.9825\n",
      "处理完成: 137L_B_2.pdb -> TM2 Score: 0.9735\n",
      "处理完成: 108M_A_1.pdb -> TM2 Score: 0.9919\n",
      "处理完成: 11BG_B_2.pdb -> TM2 Score: 0.8068\n",
      "处理完成: 13GS_A_2.pdb -> TM2 Score: 0.9962\n",
      "处理完成: 111M_A_1.pdb -> TM2 Score: 0.9897\n",
      "处理完成: 117E_B_2.pdb -> TM2 Score: 0.9948\n",
      "处理完成: 162L_A_1.pdb -> TM2 Score: 0.9423\n",
      "处理完成: 171L_A_1.pdb -> TM2 Score: 0.9164\n",
      "处理完成: 187L_A_1.pdb -> TM2 Score: 0.921\n",
      "处理完成: 140L_A_1.pdb -> TM2 Score: 0.9542\n",
      "处理完成: 172L_A_1.pdb -> TM2 Score: 0.7517\n",
      "处理完成: 13PK_B_4.pdb -> TM2 Score: 0.8461\n",
      "处理完成: 11GS_B_2.pdb -> TM2 Score: 0.9916\n",
      "处理完成: 109M_A_1.pdb -> TM2 Score: 0.9898\n",
      "处理完成: 165L_A_1.pdb -> TM2 Score: 0.9526\n",
      "处理完成: T1082-D1.pdb -> TM2 Score: 0.9061\n",
      "处理完成: 19HC_B_2.pdb -> TM2 Score: 0.9576\n",
      "处理完成: 12GS_A_2.pdb -> TM2 Score: 0.9916\n",
      "处理完成: 132L_A_1.pdb -> TM2 Score: 0.9845\n",
      "处理完成: 16PK_A_1.pdb -> TM2 Score: 0.9754\n",
      "处理完成: 180L_B_2.pdb -> TM2 Score: 0.9324\n",
      "处理完成: 12CA_A_1.pdb -> TM2 Score: 0.9949\n",
      "处理完成: 12GS_B_2.pdb -> TM2 Score: 0.9915\n",
      "处理完成: 134L_A_1.pdb -> TM2 Score: 0.9907\n",
      "处理完成: 156L_A_1.pdb -> TM2 Score: 0.9927\n",
      "处理完成: 168L_A_5.pdb -> TM2 Score: 0.9072\n",
      "处理完成: 17GS_A_2.pdb -> TM2 Score: 0.9966\n",
      "处理完成: 174L_A_2.pdb -> TM2 Score: 0.9029\n",
      "处理完成: 18GS_B_2.pdb -> TM2 Score: 0.9908\n",
      "处理完成: 180L_A_2.pdb -> TM2 Score: 0.8797\n",
      "处理完成: 175L_B_2.pdb -> TM2 Score: 0.99\n",
      "处理完成: 12E8_H_2.pdb -> TM2 Score: 0.8283\n",
      "处理完成: 133L_A_1.pdb -> TM2 Score: 0.9922\n",
      "处理完成: 119L_A_1.pdb -> TM2 Score: 0.9441\n",
      "处理完成: 168L_E_5.pdb -> TM2 Score: 0.8611\n",
      "处理完成: 154L_A_1.pdb -> TM2 Score: 0.9927\n",
      "处理完成: 13GS_B_2.pdb -> TM2 Score: 0.9926\n",
      "处理完成: 129L_A_1.pdb -> TM2 Score: 0.9355\n",
      "处理完成: 110L_A_1.pdb -> TM2 Score: 0.9541\n",
      "处理完成: 198L_A_1.pdb -> TM2 Score: 0.928\n",
      "处理完成: 104L_B_2.pdb -> TM2 Score: 0.9186\n",
      "处理完成: 1914_A_1.pdb -> TM2 Score: 0.7449\n",
      "处理完成: 193L_A_1.pdb -> TM2 Score: 0.9945\n",
      "处理完成: 185L_A_1.pdb -> TM2 Score: 0.9204\n",
      "处理完成: 102M_A_1.pdb -> TM2 Score: 0.9904\n",
      "处理完成: 199L_A_1.pdb -> TM2 Score: 0.9927\n",
      "处理完成: 11BG_A_2.pdb -> TM2 Score: 0.8259\n",
      "处理完成: 186L_A_1.pdb -> TM2 Score: 0.9221\n",
      "处理完成: 150L_C_4.pdb -> TM2 Score: 0.9084\n",
      "处理完成: 169L_C_5.pdb -> TM2 Score: 0.9193\n",
      "处理完成: 104M_A_1.pdb -> TM2 Score: 0.987\n",
      "处理完成: 163L_A_1.pdb -> TM2 Score: 0.9959\n",
      "处理完成: 13PK_A_4.pdb -> TM2 Score: 0.8518\n",
      "处理完成: 19HC_A_2.pdb -> TM2 Score: 0.9558\n",
      "处理完成: 176L_B_2.pdb -> TM2 Score: 0.9149\n",
      "处理完成: 117E_A_2.pdb -> TM2 Score: 0.9965\n",
      "处理完成: 19GS_B_2.pdb -> TM2 Score: 0.991\n",
      "处理完成: 164L_A_1.pdb -> TM2 Score: 0.9946\n",
      "处理完成: 11AS_B_2.pdb -> TM2 Score: 0.9839\n",
      "处理完成: 167L_B_2.pdb -> TM2 Score: 0.9652\n",
      "处理完成: 182L_A_1.pdb -> TM2 Score: 0.9188\n",
      "处理完成: 19GS_A_2.pdb -> TM2 Score: 0.991\n",
      "处理完成: 137L_A_2.pdb -> TM2 Score: 0.9743\n",
      "处理完成: 108L_A_1.pdb -> TM2 Score: 0.951\n",
      "处理完成: 184L_A_1.pdb -> TM2 Score: 0.9223\n",
      "处理完成: 104L_A_2.pdb -> TM2 Score: 0.9223\n",
      "处理完成: 138L_A_1.pdb -> TM2 Score: 0.9542\n",
      "处理完成: 155C_A_1.pdb -> TM2 Score: 0.9412\n",
      "处理完成: 143L_A_1.pdb -> TM2 Score: 0.9324\n",
      "处理完成: 181L_A_1.pdb -> TM2 Score: 0.921\n",
      "处理完成: 176L_A_2.pdb -> TM2 Score: 0.9064\n",
      "处理完成: 141L_A_1.pdb -> TM2 Score: 0.9439\n",
      "处理完成: 127L_A_1.pdb -> TM2 Score: 0.9689\n",
      "处理完成: 175L_A_2.pdb -> TM2 Score: 0.9657\n",
      "处理完成: 14GS_A_2.pdb -> TM2 Score: 0.9234\n",
      "处理完成: 151L_A_1.pdb -> TM2 Score: 0.9021\n",
      "处理完成: 112L_A_1.pdb -> TM2 Score: 0.9595\n",
      "处理完成: 167L_A_2.pdb -> TM2 Score: 0.9679\n",
      "处理完成: 12AS_B_2.pdb -> TM2 Score: 0.9856\n",
      "处理完成: 13PK_C_4.pdb -> TM2 Score: 0.8448\n",
      "处理完成: 128L_A_1.pdb -> TM2 Score: 0.9325\n",
      "处理完成: 169L_D_5.pdb -> TM2 Score: 0.8976\n",
      "处理完成: 150L_D_4.pdb -> TM2 Score: 0.8798\n",
      "处理完成: 11GS_A_2.pdb -> TM2 Score: 0.9916\n",
      "处理完成: 183L_A_1.pdb -> TM2 Score: 0.9171\n",
      "处理完成: 197L_A_1.pdb -> TM2 Score: 0.9784\n",
      "处理完成: 191L_A_1.pdb -> TM2 Score: 0.9517\n",
      "处理完成: 173L_A_1.pdb -> TM2 Score: 0.7707\n",
      "处理完成: 160L_A_1.pdb -> TM2 Score: 0.9629\n",
      "处理完成: 150L_A_4.pdb -> TM2 Score: 0.9815\n",
      "处理完成: 16VP_A_1.pdb -> TM2 Score: 0.8404\n",
      "处理完成: 146L_A_1.pdb -> TM2 Score: 0.9381\n",
      "处理完成: 114L_A_1.pdb -> TM2 Score: 0.9948\n",
      "处理完成: 149L_A_1.pdb -> TM2 Score: 0.9774\n",
      "处理完成: 111L_A_1.pdb -> TM2 Score: 0.9285\n",
      "处理完成: 15C8_H_1.pdb -> TM2 Score: 0.6383\n",
      "处理完成: 102L_A_1.pdb -> TM2 Score: 0.9448\n",
      "处理完成: 10MH_A_1.pdb -> TM2 Score: 0.9772\n",
      "处理完成: 169L_E_5.pdb -> TM2 Score: 0.9013\n",
      "处理完成: 152L_A_1.pdb -> TM2 Score: 0.9134\n",
      "处理完成: 178L_A_1.pdb -> TM2 Score: 0.7579\n",
      "处理完成: 16GS_A_2.pdb -> TM2 Score: 0.9922\n",
      "处理完成: 155L_A_1.pdb -> TM2 Score: 0.9274\n"
     ]
    }
   ],
   "source": [
    "import os\n",
    "import subprocess\n",
    "\n",
    "result_dir = 'result'\n",
    "real_dir = 'real'\n",
    "tools_dir = 'tools'\n",
    "tmscore_executable = os.path.join(tools_dir, 'TMscore')\n",
    "\n",
    "tm_scores = {}\n",
    "\n",
    "try:\n",
    "    pdb_files = [f for f in os.listdir(result_dir) if f.endswith('.pdb')]\n",
    "except FileNotFoundError:\n",
    "    print(f\"错误：找不到目录 '{result_dir}'。请确保路径正确或运行上面的设置块。\")\n",
    "    pdb_files = []\n",
    "\n",
    "for filename in pdb_files:\n",
    "    key = os.path.splitext(filename)[0]\n",
    "    \n",
    "    real_path = os.path.join(real_dir, filename)\n",
    "    result_path = os.path.join(result_dir, filename)\n",
    "    \n",
    "    if not os.path.exists(real_path):\n",
    "        print(f\"警告：找不到对应的文件 {real_path}，跳过 {filename}。\")\n",
    "        continue\n",
    "\n",
    "    command = [\n",
    "        tmscore_executable,\n",
    "        real_path,\n",
    "        result_path,\n",
    "        '-outfmt', '2',\n",
    "        '-seq'\n",
    "    ]\n",
    "    \n",
    "    try:\n",
    "        result = subprocess.run(\n",
    "            command,\n",
    "            capture_output=True,\n",
    "            text=True,\n",
    "            check=True,\n",
    "            encoding='utf-8'\n",
    "        )\n",
    "        \n",
    "        output_lines = result.stdout.strip().splitlines()\n",
    "        \n",
    "        data_line = None\n",
    "        for line in output_lines:\n",
    "            if not line.startswith('#') and not line.startswith('WARNING'):\n",
    "                data_line = line\n",
    "                break\n",
    "        \n",
    "        if data_line:\n",
    "            columns = data_line.split()\n",
    "            tm2_value = float(columns[3])\n",
    "            tm_scores[key] = tm2_value\n",
    "            print(f\"处理完成: {filename} -> TM2 Score: {tm2_value}\")\n",
    "        else:\n",
    "            print(f\"警告：无法从 {filename} 的输出中找到数据行。\")\n",
    "\n",
    "    except FileNotFoundError:\n",
    "        print(f\"错误：找不到程序 '{tmscore_executable}'。请确保路径正确且文件可执行。\")\n",
    "        break\n",
    "    except subprocess.CalledProcessError as e:\n",
    "        print(f\"执行命令时出错: {e}\")\n",
    "        print(f\"命令输出:\\n{e.stdout}\")\n",
    "        print(f\"命令错误:\\n{e.stderr}\")\n",
    "    except (IndexError, ValueError) as e:\n",
    "        print(f\"解析 {filename} 的输出时出错: {e}\")\n",
    "        print(f\"原始输出:\\n{result.stdout}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "b4603fce-8783-419e-9e64-45ee3ce1f462",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'170L_A_1': 0.8673, '10GS_B_2': 0.9929, '188L_A_1': 0.9162, '157L_A_1': 0.9611, '125L_A_1': 0.9484, '168L_B_5': 0.8285, '110M_A_1': 0.9901, '194L_A_1': 0.9945, '169L_B_5': 0.9581, '118L_A_1': 0.9612, '105M_A_1': 0.9733, '112M_A_1': 0.9899, '18GS_A_2': 0.9911, '106M_A_1': 0.9915, '12E8_L_2': 0.8608, '145L_A_1': 0.8936, '11BA_A_2': 0.8202, '144L_A_1': 0.94, '107M_A_1': 0.9913, '14GS_B_2': 0.9234, '109L_A_1': 0.9488, '168L_D_5': 0.8491, '12E8_P_2': 0.7977, '107L_A_1': 0.9511, '158L_A_1': 0.9267, '115L_A_1': 0.9932, '177L_A_1': 0.981, '103M_A_1': 0.9921, '17GS_B_2': 0.9981, '135L_A_1': 0.988, '126L_A_1': 0.9292, '122L_A_1': 0.9606, '113L_A_1': 0.9446, '10GS_A_2': 0.9929, '15C8_L_1': 0.9024, '121P_A_1': 0.9827, '196L_A_1': 0.9927, '169L_A_5': 0.9098, '120L_A_1': 0.9452, '192L_A_1': 0.8649, '166L_A_1': 0.9925, '123L_A_1': 0.9517, '147L_A_1': 0.9222, '161L_A_1': 0.9598, '168L_C_5': 0.9139, '103L_A_1': 0.9087, '189L_A_1': 0.9851, '153L_A_1': 0.9925, '159L_A_1': 0.9935, '139L_A_1': 0.9116, '150L_B_4': 0.9151, '195L_A_1': 0.9556, '148L_E_1': 0.8648, '190L_A_1': 0.993, '12AS_A_2': 0.9851, '16GS_B_2': 0.9922, '142L_A_1': 0.8944, '101M_A_1': 0.9909, '12E8_M_2': 0.914, '11BA_B_2': 0.8223, '130L_A_1': 0.9402, '174L_B_2': 0.8764, '13PK_D_4': 0.8781, '131L_A_1': 0.9577, '11AS_A_2': 0.9825, '137L_B_2': 0.9735, '108M_A_1': 0.9919, '11BG_B_2': 0.8068, '13GS_A_2': 0.9962, '111M_A_1': 0.9897, '117E_B_2': 0.9948, '162L_A_1': 0.9423, '171L_A_1': 0.9164, '187L_A_1': 0.921, '140L_A_1': 0.9542, '172L_A_1': 0.7517, '13PK_B_4': 0.8461, '11GS_B_2': 0.9916, '109M_A_1': 0.9898, '165L_A_1': 0.9526, 'T1082-D1': 0.9061, '19HC_B_2': 0.9576, '12GS_A_2': 0.9916, '132L_A_1': 0.9845, '16PK_A_1': 0.9754, '180L_B_2': 0.9324, '12CA_A_1': 0.9949, '12GS_B_2': 0.9915, '134L_A_1': 0.9907, '156L_A_1': 0.9927, '168L_A_5': 0.9072, '17GS_A_2': 0.9966, '174L_A_2': 0.9029, '18GS_B_2': 0.9908, '180L_A_2': 0.8797, '175L_B_2': 0.99, '12E8_H_2': 0.8283, '133L_A_1': 0.9922, '119L_A_1': 0.9441, '168L_E_5': 0.8611, '154L_A_1': 0.9927, '13GS_B_2': 0.9926, '129L_A_1': 0.9355, '110L_A_1': 0.9541, '198L_A_1': 0.928, '104L_B_2': 0.9186, '1914_A_1': 0.7449, '193L_A_1': 0.9945, '185L_A_1': 0.9204, '102M_A_1': 0.9904, '199L_A_1': 0.9927, '11BG_A_2': 0.8259, '186L_A_1': 0.9221, '150L_C_4': 0.9084, '169L_C_5': 0.9193, '104M_A_1': 0.987, '163L_A_1': 0.9959, '13PK_A_4': 0.8518, '19HC_A_2': 0.9558, '176L_B_2': 0.9149, '117E_A_2': 0.9965, '19GS_B_2': 0.991, '164L_A_1': 0.9946, '11AS_B_2': 0.9839, '167L_B_2': 0.9652, '182L_A_1': 0.9188, '19GS_A_2': 0.991, '137L_A_2': 0.9743, '108L_A_1': 0.951, '184L_A_1': 0.9223, '104L_A_2': 0.9223, '138L_A_1': 0.9542, '155C_A_1': 0.9412, '143L_A_1': 0.9324, '181L_A_1': 0.921, '176L_A_2': 0.9064, '141L_A_1': 0.9439, '127L_A_1': 0.9689, '175L_A_2': 0.9657, '14GS_A_2': 0.9234, '151L_A_1': 0.9021, '112L_A_1': 0.9595, '167L_A_2': 0.9679, '12AS_B_2': 0.9856, '13PK_C_4': 0.8448, '128L_A_1': 0.9325, '169L_D_5': 0.8976, '150L_D_4': 0.8798, '11GS_A_2': 0.9916, '183L_A_1': 0.9171, '197L_A_1': 0.9784, '191L_A_1': 0.9517, '173L_A_1': 0.7707, '160L_A_1': 0.9629, '150L_A_4': 0.9815, '16VP_A_1': 0.8404, '146L_A_1': 0.9381, '114L_A_1': 0.9948, '149L_A_1': 0.9774, '111L_A_1': 0.9285, '15C8_H_1': 0.6383, '102L_A_1': 0.9448, '10MH_A_1': 0.9772, '169L_E_5': 0.9013, '152L_A_1': 0.9134, '178L_A_1': 0.7579, '16GS_A_2': 0.9922, '155L_A_1': 0.9274}\n"
     ]
    }
   ],
   "source": [
    "print(tm_scores)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6feb91cc-43d9-4034-a522-c010b0844312",
   "metadata": {},
   "source": [
    "## 计算R.M.S.D"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "04180634-ebff-4a9e-89a6-4ce39e8e358e",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "已计算 170L_A_1: RMSD = 1.9308\n",
      "已计算 10GS_B_2: RMSD = 0.3039\n",
      "已计算 188L_A_1: RMSD = 1.4673\n",
      "已计算 157L_A_1: RMSD = 0.9578\n",
      "已计算 125L_A_1: RMSD = 1.1281\n",
      "已计算 168L_B_5: RMSD = 1.7407\n",
      "已计算 110M_A_1: RMSD = 0.3295\n",
      "已计算 194L_A_1: RMSD = 0.2179\n",
      "已计算 169L_B_5: RMSD = 0.9211\n",
      "已计算 118L_A_1: RMSD = 0.9639\n",
      "已计算 105M_A_1: RMSD = 0.4985\n",
      "已计算 112M_A_1: RMSD = 0.3492\n",
      "已计算 18GS_A_2: RMSD = 0.3392\n",
      "已计算 106M_A_1: RMSD = 0.3189\n",
      "已计算 12E8_L_2: RMSD = 2.2356\n",
      "已计算 145L_A_1: RMSD = 1.6837\n",
      "已计算 11BA_A_2: RMSD = 0.4780\n",
      "已计算 144L_A_1: RMSD = 1.2094\n",
      "已计算 107M_A_1: RMSD = 0.3616\n",
      "已计算 14GS_B_2: RMSD = 0.3308\n",
      "已计算 109L_A_1: RMSD = 1.1212\n",
      "已计算 168L_D_5: RMSD = 1.5077\n",
      "已计算 12E8_P_2: RMSD = 2.5988\n",
      "已计算 107L_A_1: RMSD = 1.0919\n",
      "已计算 158L_A_1: RMSD = 1.3660\n",
      "已计算 115L_A_1: RMSD = 0.3528\n",
      "已计算 177L_A_1: RMSD = 0.5971\n",
      "已计算 103M_A_1: RMSD = 0.3155\n",
      "已计算 17GS_B_2: RMSD = 0.1971\n",
      "已计算 135L_A_1: RMSD = 0.3140\n",
      "已计算 126L_A_1: RMSD = 1.3426\n",
      "已计算 122L_A_1: RMSD = 0.9444\n",
      "已计算 113L_A_1: RMSD = 1.1669\n",
      "已计算 10GS_A_2: RMSD = 0.3034\n",
      "已计算 15C8_L_1: RMSD = 1.7793\n",
      "已计算 121P_A_1: RMSD = 0.3144\n",
      "已计算 196L_A_1: RMSD = 0.3435\n",
      "已计算 169L_A_5: RMSD = 1.5033\n",
      "已计算 120L_A_1: RMSD = 1.1610\n",
      "已计算 192L_A_1: RMSD = 1.9504\n",
      "已计算 166L_A_1: RMSD = 0.3172\n",
      "已计算 123L_A_1: RMSD = 1.0769\n",
      "已计算 147L_A_1: RMSD = 1.4081\n",
      "已计算 161L_A_1: RMSD = 0.9524\n",
      "已计算 168L_C_5: RMSD = 1.3451\n",
      "已计算 103L_A_1: RMSD = 0.9650\n",
      "已计算 189L_A_1: RMSD = 0.4613\n",
      "已计算 153L_A_1: RMSD = 0.2801\n",
      "已计算 159L_A_1: RMSD = 0.3296\n",
      "已计算 139L_A_1: RMSD = 1.5143\n",
      "已计算 150L_B_4: RMSD = 1.3210\n",
      "已计算 195L_A_1: RMSD = 1.0172\n",
      "已计算 148L_E_1: RMSD = 1.8519\n",
      "已计算 190L_A_1: RMSD = 0.3319\n",
      "已计算 12AS_A_2: RMSD = 0.5913\n",
      "已计算 16GS_B_2: RMSD = 0.3192\n",
      "已计算 142L_A_1: RMSD = 1.6954\n",
      "已计算 101M_A_1: RMSD = 0.3391\n",
      "已计算 12E8_M_2: RMSD = 1.6644\n",
      "已计算 11BA_B_2: RMSD = 0.4556\n",
      "已计算 130L_A_1: RMSD = 1.2081\n",
      "已计算 174L_B_2: RMSD = 1.5935\n",
      "已计算 13PK_D_4: RMSD = 2.7892\n",
      "已计算 131L_A_1: RMSD = 1.0094\n",
      "已计算 11AS_A_2: RMSD = 0.6377\n",
      "已计算 137L_B_2: RMSD = 0.7449\n",
      "已计算 108M_A_1: RMSD = 0.3262\n",
      "已计算 11BG_B_2: RMSD = 0.3821\n",
      "已计算 13GS_A_2: RMSD = 0.2894\n",
      "已计算 111M_A_1: RMSD = 0.3424\n",
      "已计算 117E_B_2: RMSD = 0.3281\n",
      "已计算 162L_A_1: RMSD = 1.1968\n",
      "已计算 171L_A_1: RMSD = 1.4891\n",
      "已计算 187L_A_1: RMSD = 1.4168\n",
      "已计算 140L_A_1: RMSD = 1.0528\n",
      "已计算 172L_A_1: RMSD = 2.9475\n",
      "已计算 13PK_B_4: RMSD = 3.2381\n",
      "已计算 11GS_B_2: RMSD = 0.3429\n",
      "已计算 109M_A_1: RMSD = 0.3454\n",
      "已计算 165L_A_1: RMSD = 1.0735\n",
      "已计算 T1082-D1: RMSD = 0.5368\n",
      "已计算 19HC_B_2: RMSD = 1.0709\n",
      "已计算 12GS_A_2: RMSD = 0.3371\n",
      "已计算 132L_A_1: RMSD = 0.3466\n",
      "已计算 16PK_A_1: RMSD = 0.9463\n",
      "已计算 180L_B_2: RMSD = 1.3133\n",
      "已计算 12CA_A_1: RMSD = 0.3157\n",
      "已计算 12GS_B_2: RMSD = 0.3469\n",
      "已计算 134L_A_1: RMSD = 0.2849\n",
      "已计算 156L_A_1: RMSD = 0.3330\n",
      "已计算 168L_A_5: RMSD = 1.3417\n",
      "已计算 17GS_A_2: RMSD = 0.2276\n",
      "已计算 174L_A_2: RMSD = 1.3116\n",
      "已计算 18GS_B_2: RMSD = 0.3567\n",
      "已计算 180L_A_2: RMSD = 1.7115\n",
      "已计算 175L_B_2: RMSD = 0.2775\n",
      "已计算 12E8_H_2: RMSD = 2.2655\n",
      "已计算 133L_A_1: RMSD = 0.2833\n",
      "已计算 119L_A_1: RMSD = 1.1728\n",
      "已计算 168L_E_5: RMSD = 1.8457\n",
      "已计算 154L_A_1: RMSD = 0.2921\n",
      "已计算 13GS_B_2: RMSD = 0.2890\n",
      "已计算 129L_A_1: RMSD = 1.2709\n",
      "已计算 110L_A_1: RMSD = 1.0560\n",
      "已计算 198L_A_1: RMSD = 1.3512\n",
      "已计算 104L_B_2: RMSD = 1.3444\n",
      "已计算 1914_A_1: RMSD = 0.4441\n",
      "已计算 193L_A_1: RMSD = 0.2184\n",
      "已计算 185L_A_1: RMSD = 1.3674\n",
      "已计算 102M_A_1: RMSD = 0.3223\n",
      "已计算 199L_A_1: RMSD = 0.3524\n",
      "已计算 11BG_A_2: RMSD = 0.4456\n",
      "已计算 186L_A_1: RMSD = 1.3362\n",
      "已计算 150L_C_4: RMSD = 1.3623\n",
      "已计算 169L_C_5: RMSD = 1.2830\n",
      "已计算 104M_A_1: RMSD = 0.3377\n",
      "已计算 163L_A_1: RMSD = 0.2395\n",
      "已计算 13PK_A_4: RMSD = 3.1825\n",
      "已计算 19HC_A_2: RMSD = 1.1321\n",
      "已计算 176L_B_2: RMSD = 1.4849\n",
      "已计算 117E_A_2: RMSD = 0.2817\n",
      "已计算 19GS_B_2: RMSD = 0.3254\n",
      "已计算 164L_A_1: RMSD = 0.2638\n",
      "已计算 11AS_B_2: RMSD = 0.6041\n",
      "已计算 167L_B_2: RMSD = 0.8822\n",
      "已计算 182L_A_1: RMSD = 1.4400\n",
      "已计算 19GS_A_2: RMSD = 0.3167\n",
      "已计算 137L_A_2: RMSD = 0.7367\n",
      "已计算 108L_A_1: RMSD = 1.0946\n",
      "已计算 184L_A_1: RMSD = 1.3794\n",
      "已计算 104L_A_2: RMSD = 1.2342\n",
      "已计算 138L_A_1: RMSD = 1.0447\n",
      "已计算 155C_A_1: RMSD = 0.7220\n",
      "已计算 143L_A_1: RMSD = 1.3062\n",
      "已计算 181L_A_1: RMSD = 1.4185\n",
      "已计算 176L_A_2: RMSD = 1.5857\n",
      "已计算 141L_A_1: RMSD = 1.1318\n",
      "已计算 127L_A_1: RMSD = 0.7777\n",
      "已计算 175L_A_2: RMSD = 0.9026\n",
      "已计算 14GS_A_2: RMSD = 0.3315\n",
      "已计算 151L_A_1: RMSD = 1.2693\n",
      "已计算 112L_A_1: RMSD = 0.9850\n",
      "已计算 167L_A_2: RMSD = 0.6230\n",
      "已计算 12AS_B_2: RMSD = 0.5246\n",
      "已计算 13PK_C_4: RMSD = 3.2677\n",
      "已计算 128L_A_1: RMSD = 1.3068\n",
      "已计算 169L_D_5: RMSD = 1.4535\n",
      "已计算 150L_D_4: RMSD = 1.7652\n",
      "已计算 11GS_A_2: RMSD = 0.3450\n",
      "已计算 183L_A_1: RMSD = 1.4562\n",
      "已计算 197L_A_1: RMSD = 0.6867\n",
      "已计算 191L_A_1: RMSD = 1.0766\n",
      "已计算 173L_A_1: RMSD = 2.0895\n",
      "已计算 160L_A_1: RMSD = 0.9424\n",
      "已计算 150L_A_4: RMSD = 0.4748\n",
      "已计算 16VP_A_1: RMSD = 0.6141\n",
      "已计算 146L_A_1: RMSD = 1.2312\n",
      "已计算 114L_A_1: RMSD = 0.2895\n",
      "已计算 149L_A_1: RMSD = 0.7156\n",
      "已计算 111L_A_1: RMSD = 1.2295\n",
      "已计算 15C8_H_1: RMSD = 4.5754\n",
      "已计算 102L_A_1: RMSD = 1.0149\n",
      "已计算 10MH_A_1: RMSD = 0.8821\n",
      "已计算 169L_E_5: RMSD = 1.6178\n",
      "已计算 152L_A_1: RMSD = 1.0706\n",
      "已计算 178L_A_1: RMSD = 2.8498\n",
      "已计算 16GS_A_2: RMSD = 0.3185\n",
      "已计算 155L_A_1: RMSD = 1.3625\n"
     ]
    }
   ],
   "source": [
    "import os\n",
    "import pymol\n",
    "from pymol import cmd\n",
    "\n",
    "try:\n",
    "    pymol.finish_launching(['pymol', '-cq'])\n",
    "except Exception as e:\n",
    "    print(f\"无法使用'-cq'参数启动PyMOL，尝试无参数启动。错误: {e}\")\n",
    "    pymol.finish_launching()\n",
    "\n",
    "result_dir = 'result'\n",
    "real_dir = 'real'\n",
    "\n",
    "rmsds = {}\n",
    "\n",
    "for filename in os.listdir(result_dir):\n",
    "    if filename.endswith('.pdb'):\n",
    "        base_name = os.path.splitext(filename)[0]\n",
    "        \n",
    "        result_path = os.path.join(result_dir, filename)\n",
    "        real_path = os.path.join(real_dir, filename)\n",
    "        \n",
    "        if not os.path.exists(real_path):\n",
    "            print(f\"警告：找不到对应的参考文件 {real_path}，跳过 {filename}\")\n",
    "            continue\n",
    "            \n",
    "        cmd.reinitialize()\n",
    "        \n",
    "        cmd.load(real_path, 'real_mol')\n",
    "        cmd.load(result_path, 'result_mol')\n",
    "        \n",
    "        rmsd_info = cmd.align('result_mol and name CA', 'real_mol and name CA')\n",
    "        rmsd_value = rmsd_info[0]\n",
    "        \n",
    "        rmsds[base_name] = rmsd_value\n",
    "        \n",
    "        print(f\"已计算 {base_name}: RMSD = {rmsd_value:.4f}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c5e35180-eb25-4a3e-b81a-e2d6bb02b19c",
   "metadata": {},
   "source": [
    "## 整理预测置信度"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "04def828-7fe4-4ccb-b8ee-4086db25a861",
   "metadata": {},
   "outputs": [],
   "source": [
    "confidences = {}\n",
    "\n",
    "file_path = 'confidence.txt'\n",
    "\n",
    "with open(file_path, 'r') as file:\n",
    "    for line in file:\n",
    "        parts = line.strip().split()\n",
    "        \n",
    "        if len(parts) == 2:\n",
    "            key = parts[0]\n",
    "            value = float(parts[1])\n",
    "            confidences[key] = value"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "5396d882-ba7f-4890-9dbf-c761c599a358",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'101M_A_1': 96.36, '102L_A_1': 93.42, '102M_A_1': 96.09, '103L_A_1': 93.62, '103M_A_1': 96.08, '104L_A_2': 92.83, '104L_B_2': 92.82, '104M_A_1': 96.94, '105M_A_1': 96.94, '106M_A_1': 96.51, '107L_A_1': 94.69, '107M_A_1': 96.51, '108L_A_1': 95.12, '108M_A_1': 96.51, '109L_A_1': 94.76, '109M_A_1': 96.65, '10GS_A_2': 96.52, '10GS_B_2': 96.52, '10MH_A_1': 93.0, '110L_A_1': 94.86, '110M_A_1': 96.65, '111L_A_1': 95.08, '111M_A_1': 96.64, '112L_A_1': 94.75, '112M_A_1': 96.65, '113L_A_1': 94.84, '114L_A_1': 96.25, '115L_A_1': 96.08, '117E_A_2': 97.57, '117E_B_2': 97.57, '118L_A_1': 95.13, '119L_A_1': 94.98, '11AS_A_2': 94.11, '11AS_B_2': 94.11, '11BA_A_2': 95.25, '11BA_B_2': 95.25, '11BG_A_2': 95.25, '11BG_B_2': 95.25, '11GS_A_2': 96.52, '11GS_B_2': 96.52, '120L_A_1': 95.04, '121P_A_1': 92.9, '122L_A_1': 94.93, '123L_A_1': 94.9, '125L_A_1': 95.0, '126L_A_1': 94.76, '127L_A_1': 94.43, '128L_A_1': 94.88, '129L_A_1': 94.83, '12AS_A_2': 94.12, '12AS_B_2': 94.11, '12CA_A_1': 96.57, '12E8_H_2': 90.55, '12E8_L_2': 95.14, '12E8_M_2': 95.13, '12E8_P_2': 90.56, '12GS_A_2': 96.53, '12GS_B_2': 96.52, '130L_A_1': 95.25, '131L_A_1': 95.03, '132L_A_1': 97.47, '133L_A_1': 97.97, '134L_A_1': 97.98, '135L_A_1': 97.88, '137L_A_2': 95.38, '137L_B_2': 94.74, '138L_A_1': 94.83, '139L_A_1': 94.72, '13GS_A_2': 97.03, '13GS_B_2': 96.52, '13PK_A_4': 93.38, '13PK_B_4': 93.39, '13PK_C_4': 93.38, '13PK_D_4': 93.39, '140L_A_1': 94.47, '141L_A_1': 94.56, '142L_A_1': 94.31, '143L_A_1': 94.83, '144L_A_1': 94.62, '145L_A_1': 93.99, '146L_A_1': 94.6, '147L_A_1': 94.44, '148L_E_1': 94.88, '149L_A_1': 95.26, '14GS_A_2': 96.53, '14GS_B_2': 96.52, '150L_A_4': 93.87, '150L_B_4': 94.11, '150L_C_4': 94.1, '150L_D_4': 94.12, '151L_A_1': 93.76, '152L_A_1': 94.66, '153L_A_1': 97.76, '154L_A_1': 97.76, '155C_A_1': 76.57, '155L_A_1': 95.07, '156L_A_1': 96.21, '157L_A_1': 94.86, '158L_A_1': 94.97, '159L_A_1': 96.25, '15C8_H_1': 91.66, '15C8_L_1': 95.96, '160L_A_1': 94.87, '161L_A_1': 94.81, '162L_A_1': 95.0, '163L_A_1': 96.34, '164L_A_1': 96.53, '165L_A_1': 95.09, '166L_A_1': 95.8, '167L_A_2': 94.34, '167L_B_2': 94.35, '168L_A_5': 93.9, '168L_B_5': 93.89, '168L_C_5': 93.9, '168L_D_5': 93.9, '168L_E_5': 93.88, '169L_A_5': 94.9, '169L_B_5': 94.9, '169L_C_5': 94.9, '169L_D_5': 94.89, '169L_E_5': 94.89, '16GS_A_2': 96.53, '16GS_B_2': 96.52, '16PK_A_1': 93.38, '16VP_A_1': 88.08, '170L_A_1': 94.59, '171L_A_1': 94.83, '172L_A_1': 96.05, '173L_A_1': 96.55, '174L_A_2': 93.29, '174L_B_2': 93.79, '175L_A_2': 94.84, '175L_B_2': 95.3, '176L_A_2': 93.46, '176L_B_2': 93.47, '177L_A_1': 95.96, '178L_A_1': 95.97, '17GS_A_2': 97.39, '17GS_B_2': 97.66, '180L_A_2': 94.88, '180L_B_2': 94.78, '181L_A_1': 95.08, '182L_A_1': 95.08, '183L_A_1': 95.08, '184L_A_1': 95.06, '185L_A_1': 95.07, '186L_A_1': 95.05, '187L_A_1': 95.08, '188L_A_1': 95.06, '189L_A_1': 95.04, '18GS_A_2': 96.52, '18GS_B_2': 96.53, '190L_A_1': 96.02, '1914_A_1': 82.03, '191L_A_1': 95.04, '192L_A_1': 94.77, '193L_A_1': 97.46, '194L_A_1': 97.47, '195L_A_1': 95.08, '196L_A_1': 96.08, '197L_A_1': 95.18, '198L_A_1': 94.5, '199L_A_1': 96.36, '19GS_A_2': 96.53, '19GS_B_2': 96.52, '19HC_A_2': 87.75, '19HC_B_2': 87.76, 'T1082-D1': 93.55}\n"
     ]
    }
   ],
   "source": [
    "print(confidences)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f37174c9-a0d4-43f3-8aa1-7ca42101c8fc",
   "metadata": {},
   "source": [
    "## 计算 lDDT-Ca"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "88ad7350-d854-4916-b01d-b712fef7c159",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "正在处理: 170L_A_1.pdb...\n",
      "  -> 成功！键 '170L_A_1' 的 lDDT-Cα 值为: 0.945\n",
      "正在处理: 10GS_B_2.pdb...\n",
      "  -> 成功！键 '10GS_B_2' 的 lDDT-Cα 值为: 0.989\n",
      "正在处理: 188L_A_1.pdb...\n",
      "  -> 成功！键 '188L_A_1' 的 lDDT-Cα 值为: 0.95\n",
      "正在处理: 157L_A_1.pdb...\n",
      "  -> 成功！键 '157L_A_1' 的 lDDT-Cα 值为: 0.979\n",
      "正在处理: 125L_A_1.pdb...\n",
      "  -> 成功！键 '125L_A_1' 的 lDDT-Cα 值为: 0.976\n",
      "正在处理: 168L_B_5.pdb...\n",
      "  -> 成功！键 '168L_B_5' 的 lDDT-Cα 值为: 0.942\n",
      "正在处理: 110M_A_1.pdb...\n",
      "  -> 成功！键 '110M_A_1' 的 lDDT-Cα 值为: 0.979\n",
      "正在处理: 194L_A_1.pdb...\n",
      "  -> 成功！键 '194L_A_1' 的 lDDT-Cα 值为: 0.994\n",
      "正在处理: 169L_B_5.pdb...\n",
      "  -> 成功！键 '169L_B_5' 的 lDDT-Cα 值为: 0.962\n",
      "正在处理: 118L_A_1.pdb...\n",
      "  -> 成功！键 '118L_A_1' 的 lDDT-Cα 值为: 0.976\n",
      "正在处理: 105M_A_1.pdb...\n",
      "  -> 成功！键 '105M_A_1' 的 lDDT-Cα 值为: 0.946\n",
      "正在处理: 112M_A_1.pdb...\n",
      "  -> 成功！键 '112M_A_1' 的 lDDT-Cα 值为: 0.979\n",
      "正在处理: 18GS_A_2.pdb...\n",
      "  -> 成功！键 '18GS_A_2' 的 lDDT-Cα 值为: 0.984\n",
      "正在处理: 106M_A_1.pdb...\n",
      "  -> 成功！键 '106M_A_1' 的 lDDT-Cα 值为: 0.98\n",
      "正在处理: 12E8_L_2.pdb...\n",
      "  -> 成功！键 '12E8_L_2' 的 lDDT-Cα 值为: 0.976\n",
      "正在处理: 145L_A_1.pdb...\n",
      "  -> 成功！键 '145L_A_1' 的 lDDT-Cα 值为: 0.954\n",
      "正在处理: 11BA_A_2.pdb...\n",
      "  -> 成功！键 '11BA_A_2' 的 lDDT-Cα 值为: 0.965\n",
      "正在处理: 144L_A_1.pdb...\n",
      "  -> 成功！键 '144L_A_1' 的 lDDT-Cα 值为: 0.969\n",
      "正在处理: 107M_A_1.pdb...\n",
      "  -> 成功！键 '107M_A_1' 的 lDDT-Cα 值为: 0.979\n",
      "正在处理: 14GS_B_2.pdb...\n",
      "  -> 成功！键 '14GS_B_2' 的 lDDT-Cα 值为: 0.987\n",
      "正在处理: 109L_A_1.pdb...\n",
      "  -> 成功！键 '109L_A_1' 的 lDDT-Cα 值为: 0.972\n",
      "正在处理: 168L_D_5.pdb...\n",
      "  -> 成功！键 '168L_D_5' 的 lDDT-Cα 值为: 0.931\n",
      "正在处理: 12E8_P_2.pdb...\n",
      "  -> 成功！键 '12E8_P_2' 的 lDDT-Cα 值为: 0.946\n",
      "正在处理: 107L_A_1.pdb...\n",
      "  -> 成功！键 '107L_A_1' 的 lDDT-Cα 值为: 0.973\n",
      "正在处理: 158L_A_1.pdb...\n",
      "  -> 成功！键 '158L_A_1' 的 lDDT-Cα 值为: 0.971\n",
      "正在处理: 115L_A_1.pdb...\n",
      "  -> 成功！键 '115L_A_1' 的 lDDT-Cα 值为: 0.993\n",
      "正在处理: 177L_A_1.pdb...\n",
      "  -> 成功！键 '177L_A_1' 的 lDDT-Cα 值为: 0.971\n",
      "正在处理: 103M_A_1.pdb...\n",
      "  -> 成功！键 '103M_A_1' 的 lDDT-Cα 值为: 0.986\n",
      "正在处理: 17GS_B_2.pdb...\n",
      "  -> 成功！键 '17GS_B_2' 的 lDDT-Cα 值为: 0.999\n",
      "正在处理: 135L_A_1.pdb...\n",
      "  -> 成功！键 '135L_A_1' 的 lDDT-Cα 值为: 0.99\n",
      "正在处理: 126L_A_1.pdb...\n",
      "  -> 成功！键 '126L_A_1' 的 lDDT-Cα 值为: 0.973\n",
      "正在处理: 122L_A_1.pdb...\n",
      "  -> 成功！键 '122L_A_1' 的 lDDT-Cα 值为: 0.977\n",
      "正在处理: 113L_A_1.pdb...\n",
      "  -> 成功！键 '113L_A_1' 的 lDDT-Cα 值为: 0.965\n",
      "正在处理: 10GS_A_2.pdb...\n",
      "  -> 成功！键 '10GS_A_2' 的 lDDT-Cα 值为: 0.989\n",
      "正在处理: 15C8_L_1.pdb...\n",
      "  -> 成功！键 '15C8_L_1' 的 lDDT-Cα 值为: 0.967\n",
      "正在处理: 121P_A_1.pdb...\n",
      "  -> 成功！键 '121P_A_1' 的 lDDT-Cα 值为: 0.968\n",
      "正在处理: 196L_A_1.pdb...\n",
      "  -> 成功！键 '196L_A_1' 的 lDDT-Cα 值为: 0.987\n",
      "正在处理: 169L_A_5.pdb...\n",
      "  -> 成功！键 '169L_A_5' 的 lDDT-Cα 值为: 0.95\n",
      "正在处理: 120L_A_1.pdb...\n",
      "  -> 成功！键 '120L_A_1' 的 lDDT-Cα 值为: 0.967\n",
      "正在处理: 192L_A_1.pdb...\n",
      "  -> 成功！键 '192L_A_1' 的 lDDT-Cα 值为: 0.955\n",
      "正在处理: 166L_A_1.pdb...\n",
      "  -> 成功！键 '166L_A_1' 的 lDDT-Cα 值为: 0.987\n",
      "正在处理: 123L_A_1.pdb...\n",
      "  -> 成功！键 '123L_A_1' 的 lDDT-Cα 值为: 0.975\n",
      "正在处理: 147L_A_1.pdb...\n",
      "  -> 成功！键 '147L_A_1' 的 lDDT-Cα 值为: 0.971\n",
      "正在处理: 161L_A_1.pdb...\n",
      "  -> 成功！键 '161L_A_1' 的 lDDT-Cα 值为: 0.979\n",
      "正在处理: 168L_C_5.pdb...\n",
      "  -> 成功！键 '168L_C_5' 的 lDDT-Cα 值为: 0.95\n",
      "正在处理: 103L_A_1.pdb...\n",
      "  -> 成功！键 '103L_A_1' 的 lDDT-Cα 值为: 0.974\n",
      "正在处理: 189L_A_1.pdb...\n",
      "  -> 成功！键 '189L_A_1' 的 lDDT-Cα 值为: 0.977\n",
      "正在处理: 153L_A_1.pdb...\n",
      "  -> 成功！键 '153L_A_1' 的 lDDT-Cα 值为: 0.989\n",
      "正在处理: 159L_A_1.pdb...\n",
      "  -> 成功！键 '159L_A_1' 的 lDDT-Cα 值为: 0.992\n",
      "正在处理: 139L_A_1.pdb...\n",
      "  -> 成功！键 '139L_A_1' 的 lDDT-Cα 值为: 0.969\n",
      "正在处理: 150L_B_4.pdb...\n",
      "  -> 成功！键 '150L_B_4' 的 lDDT-Cα 值为: 0.924\n",
      "正在处理: 195L_A_1.pdb...\n",
      "  -> 成功！键 '195L_A_1' 的 lDDT-Cα 值为: 0.977\n",
      "正在处理: 148L_E_1.pdb...\n",
      "  -> 成功！键 '148L_E_1' 的 lDDT-Cα 值为: 0.954\n",
      "正在处理: 190L_A_1.pdb...\n",
      "  -> 成功！键 '190L_A_1' 的 lDDT-Cα 值为: 0.987\n",
      "正在处理: 12AS_A_2.pdb...\n",
      "  -> 成功！键 '12AS_A_2' 的 lDDT-Cα 值为: 0.947\n",
      "正在处理: 16GS_B_2.pdb...\n",
      "  -> 成功！键 '16GS_B_2' 的 lDDT-Cα 值为: 0.987\n",
      "正在处理: 142L_A_1.pdb...\n",
      "  -> 成功！键 '142L_A_1' 的 lDDT-Cα 值为: 0.962\n",
      "正在处理: 101M_A_1.pdb...\n",
      "  -> 成功！键 '101M_A_1' 的 lDDT-Cα 值为: 0.982\n",
      "正在处理: 12E8_M_2.pdb...\n",
      "  -> 成功！键 '12E8_M_2' 的 lDDT-Cα 值为: 0.978\n",
      "正在处理: 11BA_B_2.pdb...\n",
      "  -> 成功！键 '11BA_B_2' 的 lDDT-Cα 值为: 0.96\n",
      "正在处理: 130L_A_1.pdb...\n",
      "  -> 成功！键 '130L_A_1' 的 lDDT-Cα 值为: 0.972\n",
      "正在处理: 174L_B_2.pdb...\n",
      "  -> 成功！键 '174L_B_2' 的 lDDT-Cα 值为: 0.93\n",
      "正在处理: 13PK_D_4.pdb...\n",
      "  -> 成功！键 '13PK_D_4' 的 lDDT-Cα 值为: 0.914\n",
      "正在处理: 131L_A_1.pdb...\n",
      "  -> 成功！键 '131L_A_1' 的 lDDT-Cα 值为: 0.98\n",
      "正在处理: 11AS_A_2.pdb...\n",
      "  -> 成功！键 '11AS_A_2' 的 lDDT-Cα 值为: 0.941\n",
      "正在处理: 137L_B_2.pdb...\n",
      "  -> 成功！键 '137L_B_2' 的 lDDT-Cα 值为: 0.976\n",
      "正在处理: 108M_A_1.pdb...\n",
      "  -> 成功！键 '108M_A_1' 的 lDDT-Cα 值为: 0.984\n",
      "正在处理: 11BG_B_2.pdb...\n",
      "  -> 成功！键 '11BG_B_2' 的 lDDT-Cα 值为: 0.938\n",
      "正在处理: 13GS_A_2.pdb...\n",
      "  -> 成功！键 '13GS_A_2' 的 lDDT-Cα 值为: 0.992\n",
      "正在处理: 111M_A_1.pdb...\n",
      "  -> 成功！键 '111M_A_1' 的 lDDT-Cα 值为: 0.977\n",
      "正在处理: 117E_B_2.pdb...\n",
      "  -> 成功！键 '117E_B_2' 的 lDDT-Cα 值为: 0.991\n",
      "正在处理: 162L_A_1.pdb...\n",
      "  -> 成功！键 '162L_A_1' 的 lDDT-Cα 值为: 0.975\n",
      "正在处理: 171L_A_1.pdb...\n",
      "  -> 成功！键 '171L_A_1' 的 lDDT-Cα 值为: 0.972\n",
      "正在处理: 187L_A_1.pdb...\n",
      "  -> 成功！键 '187L_A_1' 的 lDDT-Cα 值为: 0.963\n",
      "正在处理: 140L_A_1.pdb...\n",
      "  -> 成功！键 '140L_A_1' 的 lDDT-Cα 值为: 0.974\n",
      "正在处理: 172L_A_1.pdb...\n",
      "  -> 成功！键 '172L_A_1' 的 lDDT-Cα 值为: 0.933\n",
      "正在处理: 13PK_B_4.pdb...\n",
      "  -> 成功！键 '13PK_B_4' 的 lDDT-Cα 值为: 0.911\n",
      "正在处理: 11GS_B_2.pdb...\n",
      "  -> 成功！键 '11GS_B_2' 的 lDDT-Cα 值为: 0.984\n",
      "正在处理: 109M_A_1.pdb...\n",
      "  -> 成功！键 '109M_A_1' 的 lDDT-Cα 值为: 0.978\n",
      "正在处理: 165L_A_1.pdb...\n",
      "  -> 成功！键 '165L_A_1' 的 lDDT-Cα 值为: 0.974\n",
      "正在处理: T1082-D1.pdb...\n",
      "  -> 错误: 处理 T1082-D1.pdb 时命令执行失败。错误信息: Command 'ost compare-structures -m result/T1082-D1.pdb -r real/T1082-D1.pdb --bb-lddt -o tmp 2> /dev/null 1> /dev/null && cat tmp | jq .bb_lddt' returned non-zero exit status 1.\n",
      "正在处理: 19HC_B_2.pdb...\n",
      "  -> 成功！键 '19HC_B_2' 的 lDDT-Cα 值为: 0.902\n",
      "正在处理: 12GS_A_2.pdb...\n",
      "  -> 成功！键 '12GS_A_2' 的 lDDT-Cα 值为: 0.983\n",
      "正在处理: 132L_A_1.pdb...\n",
      "  -> 成功！键 '132L_A_1' 的 lDDT-Cα 值为: 0.986\n",
      "正在处理: 16PK_A_1.pdb...\n",
      "  -> 成功！键 '16PK_A_1' 的 lDDT-Cα 值为: 0.953\n",
      "正在处理: 180L_B_2.pdb...\n",
      "  -> 成功！键 '180L_B_2' 的 lDDT-Cα 值为: 0.966\n",
      "正在处理: 12CA_A_1.pdb...\n",
      "  -> 成功！键 '12CA_A_1' 的 lDDT-Cα 值为: 0.982\n",
      "正在处理: 12GS_B_2.pdb...\n",
      "  -> 成功！键 '12GS_B_2' 的 lDDT-Cα 值为: 0.983\n",
      "正在处理: 134L_A_1.pdb...\n",
      "  -> 成功！键 '134L_A_1' 的 lDDT-Cα 值为: 0.989\n",
      "正在处理: 156L_A_1.pdb...\n",
      "  -> 成功！键 '156L_A_1' 的 lDDT-Cα 值为: 0.987\n",
      "正在处理: 168L_A_5.pdb...\n",
      "  -> 成功！键 '168L_A_5' 的 lDDT-Cα 值为: 0.946\n",
      "正在处理: 17GS_A_2.pdb...\n",
      "  -> 成功！键 '17GS_A_2' 的 lDDT-Cα 值为: 0.994\n",
      "正在处理: 174L_A_2.pdb...\n",
      "  -> 成功！键 '174L_A_2' 的 lDDT-Cα 值为: 0.936\n",
      "正在处理: 18GS_B_2.pdb...\n",
      "  -> 成功！键 '18GS_B_2' 的 lDDT-Cα 值为: 0.984\n",
      "正在处理: 180L_A_2.pdb...\n",
      "  -> 成功！键 '180L_A_2' 的 lDDT-Cα 值为: 0.961\n",
      "正在处理: 175L_B_2.pdb...\n",
      "  -> 成功！键 '175L_B_2' 的 lDDT-Cα 值为: 0.986\n",
      "正在处理: 12E8_H_2.pdb...\n",
      "  -> 成功！键 '12E8_H_2' 的 lDDT-Cα 值为: 0.943\n",
      "正在处理: 133L_A_1.pdb...\n",
      "  -> 成功！键 '133L_A_1' 的 lDDT-Cα 值为: 0.991\n",
      "正在处理: 119L_A_1.pdb...\n",
      "  -> 成功！键 '119L_A_1' 的 lDDT-Cα 值为: 0.967\n",
      "正在处理: 168L_E_5.pdb...\n",
      "  -> 成功！键 '168L_E_5' 的 lDDT-Cα 值为: 0.945\n",
      "正在处理: 154L_A_1.pdb...\n",
      "  -> 成功！键 '154L_A_1' 的 lDDT-Cα 值为: 0.99\n",
      "正在处理: 13GS_B_2.pdb...\n",
      "  -> 成功！键 '13GS_B_2' 的 lDDT-Cα 值为: 0.988\n",
      "正在处理: 129L_A_1.pdb...\n",
      "  -> 成功！键 '129L_A_1' 的 lDDT-Cα 值为: 0.97\n",
      "正在处理: 110L_A_1.pdb...\n",
      "  -> 成功！键 '110L_A_1' 的 lDDT-Cα 值为: 0.973\n",
      "正在处理: 198L_A_1.pdb...\n",
      "  -> 成功！键 '198L_A_1' 的 lDDT-Cα 值为: 0.968\n",
      "正在处理: 104L_B_2.pdb...\n",
      "  -> 成功！键 '104L_B_2' 的 lDDT-Cα 值为: 0.937\n",
      "正在处理: 1914_A_1.pdb...\n",
      "  -> 成功！键 '1914_A_1' 的 lDDT-Cα 值为: 0.877\n",
      "正在处理: 193L_A_1.pdb...\n",
      "  -> 成功！键 '193L_A_1' 的 lDDT-Cα 值为: 0.994\n",
      "正在处理: 185L_A_1.pdb...\n",
      "  -> 成功！键 '185L_A_1' 的 lDDT-Cα 值为: 0.958\n",
      "正在处理: 102M_A_1.pdb...\n",
      "  -> 成功！键 '102M_A_1' 的 lDDT-Cα 值为: 0.978\n",
      "正在处理: 199L_A_1.pdb...\n",
      "  -> 成功！键 '199L_A_1' 的 lDDT-Cα 值为: 0.987\n",
      "正在处理: 11BG_A_2.pdb...\n",
      "  -> 成功！键 '11BG_A_2' 的 lDDT-Cα 值为: 0.963\n",
      "正在处理: 186L_A_1.pdb...\n",
      "  -> 成功！键 '186L_A_1' 的 lDDT-Cα 值为: 0.965\n",
      "正在处理: 150L_C_4.pdb...\n",
      "  -> 成功！键 '150L_C_4' 的 lDDT-Cα 值为: 0.934\n",
      "正在处理: 169L_C_5.pdb...\n",
      "  -> 成功！键 '169L_C_5' 的 lDDT-Cα 值为: 0.944\n",
      "正在处理: 104M_A_1.pdb...\n",
      "  -> 成功！键 '104M_A_1' 的 lDDT-Cα 值为: 0.981\n",
      "正在处理: 163L_A_1.pdb...\n",
      "  -> 成功！键 '163L_A_1' 的 lDDT-Cα 值为: 0.993\n",
      "正在处理: 13PK_A_4.pdb...\n",
      "  -> 成功！键 '13PK_A_4' 的 lDDT-Cα 值为: 0.91\n",
      "正在处理: 19HC_A_2.pdb...\n",
      "  -> 成功！键 '19HC_A_2' 的 lDDT-Cα 值为: 0.895\n",
      "正在处理: 176L_B_2.pdb...\n",
      "  -> 成功！键 '176L_B_2' 的 lDDT-Cα 值为: 0.957\n",
      "正在处理: 117E_A_2.pdb...\n",
      "  -> 成功！键 '117E_A_2' 的 lDDT-Cα 值为: 0.992\n",
      "正在处理: 19GS_B_2.pdb...\n",
      "  -> 成功！键 '19GS_B_2' 的 lDDT-Cα 值为: 0.985\n",
      "正在处理: 164L_A_1.pdb...\n",
      "  -> 成功！键 '164L_A_1' 的 lDDT-Cα 值为: 0.989\n",
      "正在处理: 11AS_B_2.pdb...\n",
      "  -> 成功！键 '11AS_B_2' 的 lDDT-Cα 值为: 0.944\n",
      "正在处理: 167L_B_2.pdb...\n",
      "  -> 成功！键 '167L_B_2' 的 lDDT-Cα 值为: 0.959\n",
      "正在处理: 182L_A_1.pdb...\n",
      "  -> 成功！键 '182L_A_1' 的 lDDT-Cα 值为: 0.958\n",
      "正在处理: 19GS_A_2.pdb...\n",
      "  -> 成功！键 '19GS_A_2' 的 lDDT-Cα 值为: 0.985\n",
      "正在处理: 137L_A_2.pdb...\n",
      "  -> 成功！键 '137L_A_2' 的 lDDT-Cα 值为: 0.98\n",
      "正在处理: 108L_A_1.pdb...\n",
      "  -> 成功！键 '108L_A_1' 的 lDDT-Cα 值为: 0.975\n",
      "正在处理: 184L_A_1.pdb...\n",
      "  -> 成功！键 '184L_A_1' 的 lDDT-Cα 值为: 0.951\n",
      "正在处理: 104L_A_2.pdb...\n",
      "  -> 成功！键 '104L_A_2' 的 lDDT-Cα 值为: 0.935\n",
      "正在处理: 138L_A_1.pdb...\n",
      "  -> 成功！键 '138L_A_1' 的 lDDT-Cα 值为: 0.976\n",
      "正在处理: 155C_A_1.pdb...\n",
      "  -> 成功！键 '155C_A_1' 的 lDDT-Cα 值为: 0.757\n",
      "正在处理: 143L_A_1.pdb...\n",
      "  -> 成功！键 '143L_A_1' 的 lDDT-Cα 值为: 0.969\n",
      "正在处理: 181L_A_1.pdb...\n",
      "  -> 成功！键 '181L_A_1' 的 lDDT-Cα 值为: 0.966\n",
      "正在处理: 176L_A_2.pdb...\n",
      "  -> 成功！键 '176L_A_2' 的 lDDT-Cα 值为: 0.958\n",
      "正在处理: 141L_A_1.pdb...\n",
      "  -> 成功！键 '141L_A_1' 的 lDDT-Cα 值为: 0.972\n",
      "正在处理: 127L_A_1.pdb...\n",
      "  -> 成功！键 '127L_A_1' 的 lDDT-Cα 值为: 0.977\n",
      "正在处理: 175L_A_2.pdb...\n",
      "  -> 成功！键 '175L_A_2' 的 lDDT-Cα 值为: 0.981\n",
      "正在处理: 14GS_A_2.pdb...\n",
      "  -> 成功！键 '14GS_A_2' 的 lDDT-Cα 值为: 0.987\n",
      "正在处理: 151L_A_1.pdb...\n",
      "  -> 成功！键 '151L_A_1' 的 lDDT-Cα 值为: 0.918\n",
      "正在处理: 112L_A_1.pdb...\n",
      "  -> 成功！键 '112L_A_1' 的 lDDT-Cα 值为: 0.974\n",
      "正在处理: 167L_A_2.pdb...\n",
      "  -> 成功！键 '167L_A_2' 的 lDDT-Cα 值为: 0.977\n",
      "正在处理: 12AS_B_2.pdb...\n",
      "  -> 成功！键 '12AS_B_2' 的 lDDT-Cα 值为: 0.954\n",
      "正在处理: 13PK_C_4.pdb...\n",
      "  -> 成功！键 '13PK_C_4' 的 lDDT-Cα 值为: 0.911\n",
      "正在处理: 128L_A_1.pdb...\n",
      "  -> 成功！键 '128L_A_1' 的 lDDT-Cα 值为: 0.967\n",
      "正在处理: 169L_D_5.pdb...\n",
      "  -> 成功！键 '169L_D_5' 的 lDDT-Cα 值为: 0.944\n",
      "正在处理: 150L_D_4.pdb...\n",
      "  -> 成功！键 '150L_D_4' 的 lDDT-Cα 值为: 0.928\n",
      "正在处理: 11GS_A_2.pdb...\n",
      "  -> 成功！键 '11GS_A_2' 的 lDDT-Cα 值为: 0.984\n",
      "正在处理: 183L_A_1.pdb...\n",
      "  -> 成功！键 '183L_A_1' 的 lDDT-Cα 值为: 0.951\n",
      "正在处理: 197L_A_1.pdb...\n",
      "  -> 成功！键 '197L_A_1' 的 lDDT-Cα 值为: 0.985\n",
      "正在处理: 191L_A_1.pdb...\n",
      "  -> 成功！键 '191L_A_1' 的 lDDT-Cα 值为: 0.969\n",
      "正在处理: 173L_A_1.pdb...\n",
      "  -> 成功！键 '173L_A_1' 的 lDDT-Cα 值为: 0.929\n",
      "正在处理: 160L_A_1.pdb...\n",
      "  -> 成功！键 '160L_A_1' 的 lDDT-Cα 值为: 0.977\n",
      "正在处理: 150L_A_4.pdb...\n",
      "  -> 成功！键 '150L_A_4' 的 lDDT-Cα 值为: 0.982\n",
      "正在处理: 16VP_A_1.pdb...\n",
      "  -> 成功！键 '16VP_A_1' 的 lDDT-Cα 值为: 0.953\n",
      "正在处理: 146L_A_1.pdb...\n",
      "  -> 成功！键 '146L_A_1' 的 lDDT-Cα 值为: 0.972\n",
      "正在处理: 114L_A_1.pdb...\n",
      "  -> 成功！键 '114L_A_1' 的 lDDT-Cα 值为: 0.992\n",
      "正在处理: 149L_A_1.pdb...\n",
      "  -> 成功！键 '149L_A_1' 的 lDDT-Cα 值为: 0.968\n",
      "正在处理: 111L_A_1.pdb...\n",
      "  -> 成功！键 '111L_A_1' 的 lDDT-Cα 值为: 0.967\n",
      "正在处理: 15C8_H_1.pdb...\n",
      "  -> 成功！键 '15C8_H_1' 的 lDDT-Cα 值为: 0.927\n",
      "正在处理: 102L_A_1.pdb...\n",
      "  -> 成功！键 '102L_A_1' 的 lDDT-Cα 值为: 0.964\n",
      "正在处理: 10MH_A_1.pdb...\n",
      "  -> 成功！键 '10MH_A_1' 的 lDDT-Cα 值为: 0.924\n",
      "正在处理: 169L_E_5.pdb...\n",
      "  -> 成功！键 '169L_E_5' 的 lDDT-Cα 值为: 0.947\n",
      "正在处理: 152L_A_1.pdb...\n",
      "  -> 成功！键 '152L_A_1' 的 lDDT-Cα 值为: 0.957\n",
      "正在处理: 178L_A_1.pdb...\n",
      "  -> 成功！键 '178L_A_1' 的 lDDT-Cα 值为: 0.93\n",
      "正在处理: 16GS_A_2.pdb...\n",
      "  -> 成功！键 '16GS_A_2' 的 lDDT-Cα 值为: 0.986\n",
      "正在处理: 155L_A_1.pdb...\n",
      "  -> 成功！键 '155L_A_1' 的 lDDT-Cα 值为: 0.969\n",
      "{'170L_A_1': 0.945, '10GS_B_2': 0.989, '188L_A_1': 0.95, '157L_A_1': 0.979, '125L_A_1': 0.976, '168L_B_5': 0.942, '110M_A_1': 0.979, '194L_A_1': 0.994, '169L_B_5': 0.962, '118L_A_1': 0.976, '105M_A_1': 0.946, '112M_A_1': 0.979, '18GS_A_2': 0.984, '106M_A_1': 0.98, '12E8_L_2': 0.976, '145L_A_1': 0.954, '11BA_A_2': 0.965, '144L_A_1': 0.969, '107M_A_1': 0.979, '14GS_B_2': 0.987, '109L_A_1': 0.972, '168L_D_5': 0.931, '12E8_P_2': 0.946, '107L_A_1': 0.973, '158L_A_1': 0.971, '115L_A_1': 0.993, '177L_A_1': 0.971, '103M_A_1': 0.986, '17GS_B_2': 0.999, '135L_A_1': 0.99, '126L_A_1': 0.973, '122L_A_1': 0.977, '113L_A_1': 0.965, '10GS_A_2': 0.989, '15C8_L_1': 0.967, '121P_A_1': 0.968, '196L_A_1': 0.987, '169L_A_5': 0.95, '120L_A_1': 0.967, '192L_A_1': 0.955, '166L_A_1': 0.987, '123L_A_1': 0.975, '147L_A_1': 0.971, '161L_A_1': 0.979, '168L_C_5': 0.95, '103L_A_1': 0.974, '189L_A_1': 0.977, '153L_A_1': 0.989, '159L_A_1': 0.992, '139L_A_1': 0.969, '150L_B_4': 0.924, '195L_A_1': 0.977, '148L_E_1': 0.954, '190L_A_1': 0.987, '12AS_A_2': 0.947, '16GS_B_2': 0.987, '142L_A_1': 0.962, '101M_A_1': 0.982, '12E8_M_2': 0.978, '11BA_B_2': 0.96, '130L_A_1': 0.972, '174L_B_2': 0.93, '13PK_D_4': 0.914, '131L_A_1': 0.98, '11AS_A_2': 0.941, '137L_B_2': 0.976, '108M_A_1': 0.984, '11BG_B_2': 0.938, '13GS_A_2': 0.992, '111M_A_1': 0.977, '117E_B_2': 0.991, '162L_A_1': 0.975, '171L_A_1': 0.972, '187L_A_1': 0.963, '140L_A_1': 0.974, '172L_A_1': 0.933, '13PK_B_4': 0.911, '11GS_B_2': 0.984, '109M_A_1': 0.978, '165L_A_1': 0.974, '19HC_B_2': 0.902, '12GS_A_2': 0.983, '132L_A_1': 0.986, '16PK_A_1': 0.953, '180L_B_2': 0.966, '12CA_A_1': 0.982, '12GS_B_2': 0.983, '134L_A_1': 0.989, '156L_A_1': 0.987, '168L_A_5': 0.946, '17GS_A_2': 0.994, '174L_A_2': 0.936, '18GS_B_2': 0.984, '180L_A_2': 0.961, '175L_B_2': 0.986, '12E8_H_2': 0.943, '133L_A_1': 0.991, '119L_A_1': 0.967, '168L_E_5': 0.945, '154L_A_1': 0.99, '13GS_B_2': 0.988, '129L_A_1': 0.97, '110L_A_1': 0.973, '198L_A_1': 0.968, '104L_B_2': 0.937, '1914_A_1': 0.877, '193L_A_1': 0.994, '185L_A_1': 0.958, '102M_A_1': 0.978, '199L_A_1': 0.987, '11BG_A_2': 0.963, '186L_A_1': 0.965, '150L_C_4': 0.934, '169L_C_5': 0.944, '104M_A_1': 0.981, '163L_A_1': 0.993, '13PK_A_4': 0.91, '19HC_A_2': 0.895, '176L_B_2': 0.957, '117E_A_2': 0.992, '19GS_B_2': 0.985, '164L_A_1': 0.989, '11AS_B_2': 0.944, '167L_B_2': 0.959, '182L_A_1': 0.958, '19GS_A_2': 0.985, '137L_A_2': 0.98, '108L_A_1': 0.975, '184L_A_1': 0.951, '104L_A_2': 0.935, '138L_A_1': 0.976, '155C_A_1': 0.757, '143L_A_1': 0.969, '181L_A_1': 0.966, '176L_A_2': 0.958, '141L_A_1': 0.972, '127L_A_1': 0.977, '175L_A_2': 0.981, '14GS_A_2': 0.987, '151L_A_1': 0.918, '112L_A_1': 0.974, '167L_A_2': 0.977, '12AS_B_2': 0.954, '13PK_C_4': 0.911, '128L_A_1': 0.967, '169L_D_5': 0.944, '150L_D_4': 0.928, '11GS_A_2': 0.984, '183L_A_1': 0.951, '197L_A_1': 0.985, '191L_A_1': 0.969, '173L_A_1': 0.929, '160L_A_1': 0.977, '150L_A_4': 0.982, '16VP_A_1': 0.953, '146L_A_1': 0.972, '114L_A_1': 0.992, '149L_A_1': 0.968, '111L_A_1': 0.967, '15C8_H_1': 0.927, '102L_A_1': 0.964, '10MH_A_1': 0.924, '169L_E_5': 0.947, '152L_A_1': 0.957, '178L_A_1': 0.93, '16GS_A_2': 0.986, '155L_A_1': 0.969}\n"
     ]
    }
   ],
   "source": [
    "import os\n",
    "import subprocess\n",
    "import json\n",
    "\n",
    "lddts = {}\n",
    "\n",
    "for pdb_file in pdb_files:\n",
    "    key = pdb_file.removesuffix('.pdb')\n",
    "    \n",
    "    model_path = os.path.join(result_dir, pdb_file)\n",
    "    real_path = os.path.join('real', pdb_file)\n",
    "\n",
    "    if not os.path.exists(real_path):\n",
    "        print(f\"警告: 找不到对应的参考文件 '{real_path}'。跳过 {pdb_file}。\")\n",
    "        continue\n",
    "\n",
    "    print(f\"正在处理: {pdb_file}...\")\n",
    "    \n",
    "    command = f\"ost compare-structures -m {model_path} -r {real_path} --bb-lddt -o tmp 2> /dev/null 1> /dev/null && cat tmp | jq .bb_lddt\"\n",
    "\n",
    "    try:\n",
    "        result = subprocess.run(command, shell=True, capture_output=True, text=True, check=True)\n",
    "        output_value = result.stdout\n",
    "\n",
    "        score = float(output_value.strip())\n",
    "        \n",
    "        lddts[key] = score\n",
    "        print(f\"  -> 成功！键 '{key}' 的 lDDT-Cα 值为: {score}\")\n",
    "\n",
    "    except subprocess.CalledProcessError as e:\n",
    "        print(f\"  -> 错误: 处理 {pdb_file} 时命令执行失败。错误信息: {e}\")\n",
    "    except ValueError:\n",
    "        print(f\"  -> 错误: 无法将命令输出 '{output_value.strip()}' 转换为数字。\")\n",
    "    except Exception as e:\n",
    "        print(f\"  -> 发生未知错误: {e}\")\n",
    "\n",
    "if os.path.exists('tmp'):\n",
    "    os.remove('tmp')\n",
    "print(lddts)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "293742bd-e121-4ee0-b6a6-769a81d47272",
   "metadata": {},
   "source": [
    "## 打印示例蛋白质指标"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "a3c20d17-eef6-4100-8743-cb250de88617",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "10GS_A_2 Ca R.M.S.D. 0.3033767342567444\n",
      "10GS_A_2 TM score 0.9929\n",
      "101M_A_1 Ca R.M.S.D. 0.3390856683254242\n",
      "101M_A_1 TM score 0.9909\n",
      "110L_A_1 Ca R.M.S.D. 1.055968999862671\n",
      "110L_A_1 TM score 0.9541\n"
     ]
    }
   ],
   "source": [
    "for protein in [\"10GS_A_2\", \"101M_A_1\", \"110L_A_1\"]:\n",
    "    print(f\"{protein} Ca R.M.S.D. {rmsds[protein]}\")\n",
    "    print(f\"{protein} TM score {tm_scores[protein]}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9261e34a-763a-4632-8279-e2c66226dbb0",
   "metadata": {},
   "source": [
    "## 绘制 R.M.S.D 分布图"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "472f26b4-0105-4d40-9d13-3edeafcde6d9",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "各区间的比例:\n",
      "  RMSD Range  Proportion\n",
      "0    0–0.5 Å    0.357143\n",
      "1    0.5–1 Å    0.154762\n",
      "2      1–2 Å    0.422619\n",
      "3      2–4 Å    0.059524\n",
      "4      4–8 Å    0.005952\n",
      "5       >8 Å    0.000000\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/tmp/ipykernel_203419/4027257703.py:24: FutureWarning: \n",
      "\n",
      "Passing `palette` without assigning `hue` is deprecated and will be removed in v0.14.0. Assign the `x` variable to `hue` and set `legend=False` for the same effect.\n",
      "\n",
      "  barplot = sns.barplot(x='RMSD Range', y='Proportion', data=plot_df, order=labels, palette=\"viridis\")\n"
     ]
    },
    {
     "data": {
      "image/png": "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//t/atSokcqXL69KlSqpc+fOFm/aErYNCQmRJL3//vsqWbKkDh8+LOn/fj9nz55Vp06dVK5cOVWrVk3btm3T4cOHVbJkSb333ntW6z1z5oy6du0qT09PVaxYUb169TL3oDyuZMmSKlmypPnn+rgRI0aoZMmS5ns/RowYoU6dOkl61LNSsmRJdezYUZKSrOfYsWPq3bu33n77bfM1Pnr0aP3999+J2qb1ejGye/dude3aVZUqVVK5cuXUoEEDTZ06Vbdu3TK3Sag94R6eefPmGV77j9u+fbv++usvlS5dWv/73/8M2+XKlUtdunRRlSpVdO/ePYt1N27c0Pjx41WzZk2VK1dO9erV07x58xQXF6edO3eqZMmS6tWrV6rOOSlZs2Y1h5jHfwYJ8uXLJw8PD50+fVqXLl2yuo/NmzcrW7ZsqlmzptX1169flyTDe7bs7e3VqVMn+fn5yc3NLdXn4O3trXr16unBgwcpui/pnXfeUZ48eRQREaHjx49bbRMXF2cOeo8PxwsODla/fv1Uo0YNlS1bVp6enmrevLm+/PJLc8BOyrN4jX348KHmzp0rX19fVahQQZ6envL19dX8+fP14MGDZGsEnncEJuAlEBMTo+7du+v27duqWbOm7OzszDdkr1u3Tm3bttX27dv16quvqnbt2rK3t9eSJUvUqlUr/fnnnxb72r17t9q2basdO3aoYMGCqlatmk6fPq333ntPZ8+eTZd69+/fL19fX/3www9yc3NTrVq1lD17dgUGBsrPz0+//PJLom3i4+PVo0cPzZs3T3nz5lX16tV1584dffPNN3r//fcTvVkfO3as+vTpoyNHjujNN99UpUqVFBERoTFjxmj48OEymUyqXbu2cubMqePHj1v9pHz9+vWKj49P1/uCEm5IDw0NTfLN0s2bN9W5c2d9//33cnR01DvvvKNSpUrpyJEjGjx4sAICAiRJrq6uatq0qfm+qcqVK6tp06bKnTu3xf769u2r8PBw1axZU46OjipTpkySdf71119q166dfv31V1WvXl1FihTRTz/9pPfee08//vhjms/f09PTfDN7zpw51bRp02Rvbl+xYoXat2+vnTt3qlChQqpdu7acnJy0atUqtWjRwmqIS+31YmTatGnq0aOHgoODVbJkSdWqVUv379/XggUL5Ofnp4iICElS7ty51bRpU5UoUUKSVKJECTVt2jTZ+w23bNkiSWrcuHGyw+z8/f21ePFiNWnSxLzs+vXratOmjZYvX66HDx/qnXfeUd68efX5559ryJAh5jfZ6TmBwLFjx3Tr1i05OjrqjTfesNqmUaNGkmS1l+nmzZsKDg5W3bp15ezsbHX7hNev4cOH69y5c1bbtGzZUpMnT07xJCf/Vbt2bUmPAk1yHB0d1bx5c0nShg0brLbZv3+/rl27Ji8vL/N9a4sXL1aXLl30008/qUiRIqpdu7aKFy+u33//XZ9//rl50ov0lprXWJPJpCFDhmjOnDm6fv26fHx8zK+XM2bMUM+ePZ9KjUBGwj1MwEvgwYMHypkzp1auXKlMmTIpPj5e9vb2Cg8P18cff6xMmTIpICDA/MYiPj5es2bN0rx58zR06FBzb0dUVJRGjRql6OhoTZ482RwUoqKi1KtXL+3fv/+Ja71x44YGDRqk6OhozZgxQ++++6553erVq/XJJ59owIABCgoKsngzdffuXZ09e1Zr1qwxv5n666+/5Ofnp99++0379u0z3zOwY8cOffvtt8qXL58WL15svkn7xo0bat++vTZt2qRGjRqpbt26atasmZYsWaINGzaob9++FrWuW7dO9vb2atGixROfd4L8+fPL1dVV9+7d05UrVwyH4X377be6cOGCevToYfGm6uTJk2rXrp2+/vprdevWTTlz5tS0adPUsWNHXb9+Xd27d7f65vjhw4fatGmTcuTIYb4+rH3SnODq1avy8fFRQECAeYKKNWvW6KOPPtKoUaPk4+OTpokr2rRpoyJFiujgwYMqUqRIsvfr/fbbb5owYYKcnJw0Z84cc49EfHy8AgICNGfOHPXt21fbtm1T5syZzdul5nox8tNPP+nrr7+Wm5ubxeQC0dHRGjdunL7//nv1799fa9askbu7u6ZNm6Y5c+bo7Nmzql27tgYOHJjsz+P8+fOSpLfeeivZttZMmTJFly5dkoeHhxYuXGj+nezZs0e9evUy99A8aWCKjY01B53PPvtMktS+fftEs9QlaNiwoT799FOr9zFt375dsbGxevfddw2Hww0YMEDdunVTaGio3n33XRUvXlxvv/22KlasqIoVKypnzpxPdD6SzKHmjz/+SFH7li1basGCBdqyZYtGjRolR0fLt1gJkz0k9BT+888/mj59utzc3LR69WoVKVLE3DY0NFSd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vHixatWqpR9++MGiXZkyZcw9d0ahHHhREJiAl1jHjh3l4OCgWbNmJXrWyKpVq7R+/Xr99ttv5qEWCW/eDh48aDEbX0xMjD7++GOrn2YmDOdbtWqVxXOFgoKCrD6vp02bNnJ1ddXy5cu1efNmi3W7du3S4sWLdfr06ScKKwmBYsqUKRaB48aNG5o6daokmT9FTVCxYkUVKVJE69ev17///quWLVum+fjWXLx4UT179tQ///yjOnXqGD6wM0GuXLl08+ZNffbZZxY/1wcPHpjfqD8+RCZhCF3C/VFPKioqSh9//LHFDemLFi1ScHCwChQoYHFvV8I1sHTpUvOyuLg4TZkyxeqbvIRarQWy/+rQoYMcHBz09ddfWwRgk8mkuXPn6siRI8qXL1+632smyXyz/meffaZff/3VvDwmJkZjx47VpUuX9Oabb1qdcCGlnJ2dNXr0aDk4OOiTTz7RggULEk1IcebMGX344Ye6deuWvL29zT2fWbJkMb9JnzFjhsV2q1at0pEjR/TKK6/o2rVrunz5cpprfFyFChXMPSkzZswwfPh1gly5cqlSpUr65ZdftHLlShUqVCjZoV2VKlXS22+/rTt37qhLly76+eefE7U5e/aseZa+bt26peocEh4kazKZ1L9//zRNUd6yZUvFxMRo4cKFCg8PV7169RLdC5Ww3127dlncp3T58mX16dPH/Cyw5CateNqvsQULFtTly5f15ZdfWtyPZzKZzM+cYjgeXnQMyQNeYmXLltVHH32kCRMmqEuXLipdurRef/11/fHHHwoLC5ODg4OmTp1qfsipk5OTPv/8c73//vuaPHmy1q5dqzfeeEOnTp3SP//8ozx58iS6wb1169ZasWKFjh8/rvr165tnnPv111/l6+trvhk6Qb58+TRlyhQNGjRIgwYN0hdffKGiRYvq77//Nn8SPnLkSL355ptpPu/GjRvr8OHDWrVqlRo3bqxKlSrJ3t5eR48e1b///qs2bdpYfYPt5+enGTNmyMnJKVGgSql58+ZZ9I7du3dPf/75p8LCwhQfH6/KlSubn2OTFH9/f+3atUtbt27V0aNHzW9uTp48qevXr6tSpUoWDzAtUqSI9u3bp/Hjx2vz5s16//33k31oalJKly6tnTt3qn79+ipXrpwuXryoM2fOKFu2bPr8888t7tv54IMPdOzYMS1evFiHDh1S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Ls37BQAAADIqAlMGdOzYMTVs2FDR0dHmZdHR0XJyctKBAwe0atUqi/bR0dHKnDmz4f5OnTqVaKKHtJgwYYI++ugjOTo6KiwsTGXKlFG2bNlUqFAhhYWFPdG+AQAAgIyIwJQBlSxZ0jz1d3R0tP766y9NmTJFrVq1kpOTkyZPnqzg4GCZTCYdP35cy5YtszqleIKjR4+qTJkyiR4SnBpBQUHKnz+/vLy8JEmFCxfW8ePHdfPmTf3xxx8qXLhwmvcNAAAAZFQ2n/QBiWXJkkULFizQpEmTVLVqVWXLlk1NmzZV79695ezsrJEjR2rMmDG6evWqcufOrb59+6p58+aSpNDQUH344YfavHmzeda7iIgI5cuXL831REVF6csvv9TSpUvNy0aPHq2PPvpIU6ZMUceOHVW6dOknO2kAAAAgA7IzJcwZ/RKIi4vTiRMn5OHhwUMOAaRah1lf6ffLV2xdBh5T8rX8Wt6/u63LAAA8h1KaDRiSBwAAAAAGCEwAAAAAYIDABAAAAAAGCEwAAAAAYIDABAAAAAAGCEwAAAAAYIDABAAAAAAGCEwAAAAAYIDAlALxcfG2LgEG+N0AAADgaXK0dQHPA3sHe00bu1IRF/+xdSl4TMHCeTVk9Hu2LgMAAAAvMAJTCkVc/EfhZ/+ydRkAAAAAniGG5AEAAACAAQITAAAAABggMAEAAACAAQITAAAAABggMAEAAACAAQITAAAAABggMAEAAACAAQITAAAAABggMAEAAACAAQITAAAAABggMAEAAACAAQITAAAAABggMAEAAACAAQITAAAAABggMAEAAACAAQITAAAAABggMAEAAACAAQITAAAAABggMAEAAACAAQITAAAAABggMAEAAACAAQITAAAAABggMAEAAACAAQITAAAAABggMAEAAACAAQITAAAAABggMAEAAACAAQITAAAAABggMAEAAACAAQITAAAAABggMAEAAACAAQITAAAAABggMAEAAACAAQITAAAAABggMAEAAACAAQITAAAAABggMAEAAACAAQITAAAAABggMAEAAACAAQITAAAAABggMAEAAACAAQITAAAAABggMAEAAACAAQITAAAAABggMAEAAACAAQITAAAAABggMAEAAACAAQITAAAAABggMAEAAACAAQITAAAAABggMAEAAACAAQITAAAAABggMAEAAACAAQITAAAAABggMAEAAACAAQITAAAAABggMAEAAACAAQITAAAAABggMAEAAACAAQITAAAAABggMAEAAACAAQITAAAAABggMAEAAACAAQITAAAAABggMAEAAACAAQITAAAAABiweWC6fv26/P395e3tLR8fH02cOFGxsbFW265cuVINGjSQp6enGjRooBUrVjzjagEAAAC8TGwemAYMGCBXV1ft27dPgYGBCg4O1pIlSxK127lzp2bMmKEpU6bo2LFj+vTTT/X5559r27Ztz75oAAAAAC8FR1se/OLFiwoJCdHevXvl4uKiggULyt/fX1OnTlW3bt0s2l69elUffvihPDw8JEmenp7y8fHRkSNH1KBBg1QdNy4uLlXtHRwcUtUez1Zqf59AWvA6kLHxOgAASK2U/u2waWAKCwuTm5ub8uXLZ17m7u6uy5cv686dO3rllVfMy9u3b2+x7fXr13XkyBGNHDky1cc9depUitu6uLiodOnSqT4Gnp3ff/9d9+/ft3UZeIHxOpDx8ToAAHhabBqY7t69KxcXF4tlCd/fu3fPIjA97tq1a+rRo4fKli2rJk2apPq45cqV49PiF0jJkiVtXQIAG+N1AACQWnFxcSnqSLFpYHJ1dU30iWDC91myZLG6zYkTJ9S/f395e3tr8uTJcnRM/Sk4ODgQmF4g/C4B8DoAAHhabDrpQ/HixXXr1i1FRkaal4WHhyt//vzKli1bovaBgYHq0qWLOnfurOnTp8vZ2flZlgvYxI0bN1SvXj0dPnzYvGz06NEqW7asPD09zV+rV69Odl/ff/99ok/iIyIi9OGHH6pSpUqqXLmyhg0bpjt37kh69MnLsGHDVKFCBTVs2FChoaEW2zVr1kzR0dHpdKYAAAAZj00DU5EiReTl5aVJkyYpKipKERERCggIUKtWrRK13bZtm8aMGaM5c+bogw8+sEG1wLN39OhRtWnTRpcuXbJYfurUKY0fP17Hjx83f7Vp0ybJfYWFhWnSpEmJlg8aNEjFihXTgQMHtGXLFl2+fFmffvqpJGn//v06evSodu/erXbt2umzzz4zbzdhwgQNHz6cDy4AAMALzebTis+ePVuxsbGqU6eOWrdurerVq8vf31/So5nwNmzYIEmaO3eu4uLi1K9fP4tP1T/55BNblg88NevWrdOQIUM0cOBAi+XR0dE6e/asypYtm+J9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",
      "text/plain": [
       "<Figure size 1000x600 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import pandas as pd\n",
    "import seaborn as sns\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "\n",
    "bins = [0, 0.5, 1, 2, 4, 8, np.inf]\n",
    "labels = ['0–0.5 Å', '0.5–1 Å', '1–2 Å', '2–4 Å', '4–8 Å', '>8 Å']\n",
    "\n",
    "rmsd_values = pd.Series(rmsds.values())\n",
    "\n",
    "binned_data = pd.cut(rmsd_values, bins=bins, labels=labels, right=False, include_lowest=True)\n",
    "\n",
    "proportion_data = binned_data.value_counts(normalize=True).sort_index()\n",
    "\n",
    "plot_df = proportion_data.reset_index()\n",
    "plot_df.columns = ['RMSD Range', 'Proportion']\n",
    "\n",
    "print(\"各区间的比例:\")\n",
    "print(plot_df)\n",
    "\n",
    "sns.set_style(\"whitegrid\")\n",
    "plt.figure(figsize=(10, 6))\n",
    "\n",
    "barplot = sns.barplot(x='RMSD Range', y='Proportion', data=plot_df, order=labels, palette=\"viridis\")\n",
    "\n",
    "plt.title('Frequency Distribution of Cα RMSD Values', fontsize=16)\n",
    "plt.xlabel('Cα RMSD (Å)', fontsize=12)\n",
    "plt.ylabel('Proportion', fontsize=12)\n",
    "\n",
    "plt.ylim(0, 1)\n",
    "\n",
    "for p in barplot.patches:\n",
    "    barplot.annotate(format(p.get_height(), '.2%'),\n",
    "                     (p.get_x() + p.get_width() / 2., p.get_height()),\n",
    "                     ha='center', va='center',\n",
    "                     xytext=(0, 9),\n",
    "                     textcoords='offset points')\n",
    "\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "efbb7562-a12f-465d-b0dd-4e15daef82d7",
   "metadata": {},
   "source": [
    "## 置信度准确性散点图"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "71b9f246-7c0b-405d-a4cb-7a517baeb74a",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "         id  confidence   lddt\n",
      "0  101M_A_1       96.36  0.982\n",
      "1  102L_A_1       93.42  0.964\n",
      "2  102M_A_1       96.09  0.978\n",
      "3  103L_A_1       93.62  0.974\n",
      "4  103M_A_1       96.08  0.986\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAArYAAAIdCAYAAADI2D7BAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAagxJREFUeJzt3XlclOX+//E3DDsIKKTmlgaopZgoasniVmqapmmZeSzDluOaZSft9NXSculUP82tza3F1Eot81idVlMrzaQkqxOouUQpoIDIMiz37w/PTIwMMMg+vp6PR49Hc983M9c993U47y4+13W5GIZhCAAAAKjnXGu7AQAAAEBVINgCAADAKRBsAQAA4BQItgAAAHAKBFsAAAA4BYItAAAAnALBFgAAAE6BYAsAAACnQLAFAACAU3Cr7QYAcC4JCQl67bXX9O233+r06dO67LLLdN111+n+++9Xy5Ytq+Uzt2/frmeeeUapqakaPny4zGaz9u7dq88++6zUn9m8ebMeffRRffrpp2rRokW1tKu+ateunSZPnqwpU6boxIkT6tevn815d3d3+fv765prrtF9992niIgI67mKXt+uXbty22Npiz1nzpzRiy++qE8//VR//vmnfHx8dNVVV+mOO+7QgAEDKnLbAJwAwRZAlVm3bp3mz5+vHj16aPr06WrcuLGOHTumlStX6j//+Y/WrFmjDh06VPnnzpkzR61bt9bChQvVpEkTubq66s4776zyz7mUTZgwQb1795Yk5eXl6c8//9Srr76qMWPGaMmSJbr++usv6vqNGzfa/NyoUaM0cuRI3XrrrdZjTZs2tdum3NxcjRkzRgUFBbr33nvVunVrnT17Vh988IGmTp2qRx99VOPGjauaLwBAvUCwBVAlvvvuO82bN09jxozRY489Zj3eo0cP9evXT7fccoseffRRbd26tco/Oz09XVFRUerRo0eVvzfOa9WqlTp37mxz7MYbb9Qdd9yhxx57TNdee638/PwqfP2F10jng6y94xf68MMPdejQIX344Ydq06aN9fj111+v3NxcLV26VGPHjpXJZKrIrQKox6ixBVAlVq1apQYNGuihhx4qca5Ro0aaOXOm+vfvr6ysLOvx7du365ZbblFERISioqI0e/ZsZWRkWM8vXbpUN9xwg7744gsNGTJEHTt21IABA7RlyxZJ0p49e6x/yl6+fLnatWunEydOaObMmerbt6/1fYqKirRixQr17t1b11xzjSZOnGjzORa//vqr7r//fnXp0kVdunTRpEmTdPz4cet5y+d9/fXXiouL0zXXXKOePXvq6aefVkFBgfW6/Px8LV++XNdff706deqkwYMHa9OmTTaf9cknn+iWW25ReHi4oqKi9NRTTyk7O7vU73fWrFm69tprbT5Hkp555hl1795dZrNZeXl5mjNnjmJjY9WxY0cNHDhQq1evLvU9K8vDw0NTpkxRenq6Pvjggyq/vjypqamSJMMwSpy7//77NXHiRJnNZuuxH3/8Uffcc4+6du2qa6+9Vg8++KD++OMP6/lTp07p0UcfVa9evdSpUyeNHDlSn376qc37tmvXTsuWLdOIESPUtWtXrVixQpKUnJyshx56SN27d9c111yju+66Sz/99FOl7xFAxRBsAVSaYRjatWuXrrvuOnl7e9u9ZuDAgZo8ebJ1VG/FihV68MEHdc0112jJkiWaNGmSPvroI40dO1a5ubnWn0tJSdHcuXN155136uWXX1aLFi00c+ZMHTp0SB06dLD+KXvkyJHauHGjGjduXOKzn3nmGS1fvlwjRozQsmXL1LBhQz333HM21xw5ckS333670tLStHDhQs2bN0/Hjx/X6NGjlZaWZnPtww8/rK5du+rFF1/UkCFDtHr1ar3zzjvW8zNmzNDLL7+skSNH6qWXXlKvXr30z3/+U++++64k6f3339ekSZN05ZVXavny5Zo8ebK2bt2qiRMn2g1pknTzzTfrzJkz+vrrr22+9+3bt2vgwIHy8PDQvHnztGPHDs2YMUOrVq1Sv3799PTTT2vz5s2lPbpKi4qKkqurq/bv318t15clJiZGbm5uuuuuu7Rs2TJ9//33ys/PlyR16tRJ48ePt/bHX375RaNHj1ZOTo4WLlyouXPn6qefflJcXJzy8/OVmpqqkSNHau/evXrwwQe1dOlSNW/eXJMmTSrxV4YXXnhBAwYM0P/7f/9P/fr10+nTp3X77bfr4MGDmjVrlp577jkVFRVpzJgxOnToUKXvE4DjKEUAUGlnzpxRXl6ew5OwMjIy9MILL+jWW2/V448/bj3etm1bjRkzRps3b9Ydd9whScrJydG8efN03XXXSZJat26tPn36aMeOHYqLi7P+ybq0P19nZmbq9ddf15133mmdgBQTE6OTJ09q586d1uuWLVsmLy8vrV271hq+r7vuOl1//fVauXKlZsyYYb321ltv1aRJk6zXfPLJJ/riiy90++23KzExUf/+97/12GOPWet8r7vuOiUnJ2vPnj26+eab9eyzzyomJkbPPvus9T1bt26tcePGaceOHdba1OK6du2qFi1aaPv27YqJiZF0vvwjOTlZN998syRp79696tmzpwYPHizpfBmIj4+PGjZs6NBzuRhubm4KDAxUSkpKtVxflnbt2mnRokWaM2eOli5dqqVLl8rLy0uRkZEaMWKEBg0aZL12xYoVCggI0OrVq+Xp6SnpfJ+ZNm2a/vvf/+qDDz7Q6dOn9cEHH1gnOfbq1Uvjxo3Tv/71L910001ydT0/FtSpUyfdd9991vdetGiR0tPTtX79ejVv3lySFBsbq0GDBun555/XkiVLKn2vABzDiC2ASrP8H35hYaFD13///fcym80aMmSIzfHIyEg1b95ce/bssTlePLBaJhKV9Wf7Cz8rPz+/xEz9G2+80eb1N998ox49esjLy0sFBQUqKCiQn5+fIiMj9dVXX9lcW3xWv6VNlvbs27dPknTDDTfYXLN48WItWLBAhw8f1p9//qm+fftaP6egoEDdunWTn5+fdu/ebfc+XFxcNHToUH388cfWP69v27ZNLVu2VNeuXSWdD7Jvv/227r33Xr355pv6/fffNWnSJPXp08eh76oyXFxcqvX60vTv319ffPGFVq5cqbi4OIWEhOirr77Sgw8+qKlTp1pHwL/77jvFxsZaQ610PqB+9tln6tixo/bu3auIiIgSK3cMHTpUKSkpOnz4sPVY27Ztba75+uuvddVVV6lJkybW5+nq6qrY2NgSfQdA9WLEFkClBQYGytfXV8nJyaVek52dLbPZrMDAQGt9a3BwcInrgoODdfbsWZtjxcsbLCG6tD/ZX8jyWY0aNbI5ftlll9m8Tk9P1/bt27V9+/YS73Hhz3p5edm8dnV1tbYnPT1dkhQUFGS3PZbzc+bM0Zw5c0qcP3XqVCl3Ig0bNkwrVqzQl19+qd69e+vDDz+0jmxL0mOPPaamTZtq69at1veOiIjQ7NmzdfXVV5f6vpWRm5urjIyMUlcuqOz1jnB3d1dMTIx1JPvUqVN66qmn9NFHH+mLL75Qnz59lJ6eXuozkc73E3t/cbD00czMzBLHLNLT03X06NFSV/zIyckptUQHQNUi2AKoEtHR0dqzZ4/y8vJsRsUsNm/erHnz5unNN99UQECApPOTf0JCQmyuS0lJqdL1bi1/hk9LS9OVV15pPW4JmBYNGjRQz549dffdd5d4Dzc3x39V+vv7S5JOnz5tE94OHz6s06dPW+/9kUceUffu3Uv8vOW8PVdccYU6d+6sDz74QO7u7jpz5oyGDh1qPe/h4aEJEyZowoQJSk5O1ueff64VK1Zo+vTpVTJZy549e/aosLBQ3bp1q5bry3L77berTZs2WrBggc3xxo0bW4NtUlKS+vTpowYNGuj06dMl3mPHjh1q3769AgICrJPRirOUTJRVztGgQQN1795djzzyiN3zHh4eFbktAJVAKQKAKhEXF6f09HQtWrSoxLm0tDStXLnSGsyuueYaeXh46P3337e5bt++fUpOTlaXLl2qrF0RERHy8vLShx9+aHP8888/t3ndvXt3JSUl6aqrrlJ4eLjCw8PVsWNHrV27Vh9//LHDn2cpC/jkk09sji9atEhPPvmkrrzySgUFBenEiRPWzwkPD1fTpk313HPPlTuTfujQofryyy+1bds2de7cWa1bt5Z0fiR0wIAB1lUQmjVrpjFjxmjw4MH6888/HW5/RRQUFOiFF15QcHBwidKLqri+PM2bN9eHH35os3KFxZEjRyT9VTYQGRmpnTt32qyS8N///lf33XefEhIS1K1bN8XHx5d4r61bt+qyyy7TFVdcUWo7unfvriNHjqhNmzY2z3Tr1q16++23WW4MqEGM2AKoEp07d9YDDzygxYsX69ChQxo+fLgaNmyoxMRErV69WufOndPLL78sFxcXBQYG6r777tOyZcvk7u6ufv366cSJE3r++ecVGhqqW265pcra5evrq4kTJ2rx4sXy9vbWtddeqx07dpQIthMnTtTtt9+u+++/X6NHj5anp6c2btyoTz75pEKTf9q3b6+BAwfq2WefVW5urjp06KBdu3bp448/1uLFi2UymfTggw9q9uzZMplM6tOnjzIzM7VixQqdPHmy3A0sBg8erAULFlgnqFl4eXmpQ4cO1u+0Xbt2OnLkiLZs2WKzA9dPP/0kDw8PhYaGOnxPknTs2DF9//33ks4vZ3bixAlt2LBBBw8e1PLly0v8qb2i11+MBx98UHv27NHIkSN15513KiIiQq6urkpISNDq1asVGxur2NhYSeef76hRo3Tvvffqrrvuktls1vPPP68OHTooNjZW11xzjbZu3aq7775bkydPVsOGDfXuu+/qm2++0fz5860lMPaMGzdO7733nsaNG6e4uDg1bNhQ27dv11tvvaVHH3200vcJwHEEWwBVZsKECbr66qu1bt06LViwQOnp6WratKliY2P197//Xc2aNbNeO2XKFAUHB+uNN97Q22+/rcDAQA0cOFDTpk2r8nrE+++/Xz4+Pnr11Vf16quvKiIiQjNmzNATTzxhvaZ9+/Zat26dFi1apEceeUSGYaht27Zavnx5iYln5XnmmWe0bNkyvf766zpz5ozatGmjxYsXa+DAgZLOr6rg6+urlStXauPGjfLx8VGXLl307LPPlluGERgYqF69emnHjh02s/4lae7cuVq8eLFWr16tlJQUBQUFaeTIkXrggQes10yePFnNmzfX66+/XqF7euGFF/TCCy9Ikjw9PdWkSRNFRkZqzpw5at++faWvvxgtWrTQli1b9NJLL+n999/XK6+8IsMwdMUVV2j8+PG68847rZPUrr76ar3++ut67rnn9OCDD8rX11e9evXSww8/LA8PD1122WVav369nnvuOc2bN0/5+flq3769VqxYUe7zb9KkiTZs2KDnnntOTzzxhPLy8tS6dWvNmzdPI0eOrJJ7BeAYF8PRGRgAAABAHUaNLQAAAJwCwRYAAABOgWALAAAAp0CwBQAAgFMg2AIAAMApEGwBAADgFC7pdWyLiopUUFAgV1dX61qHAAAAqDsMw1BRUZHc3NzK3CxFusSDbUFBgRISEmq7GQAAAChHeHi4PDw8yrzmkg62ltQfHh7OXt5OprCwUAkJCTxbSKI/4C/0BRRHf6gfLM+pvNFa6RIPtpbyA5PJRId2UjxbFEd/gAV9AcXRH+oHR8pGmTwGAAAAp0CwBQAAgFMg2AIAAMApEGwBAADgFAi2AAAAcAoEWwAAADgFgi0AAACcAsEWAAAAToFgCwAAAKdAsAUAAIBTINgCAADAKRBsAQAA4BRqNdiePn1aN9xwg/bs2VPqNTt27NCQIUPUuXNn3Xjjjfr8889tzr/yyiuKjY1V586dNXbsWB0+fLi6mw0AAIA6qNaC7XfffadRo0bp2LFjpV7z22+/acqUKXrggQe0b98+TZkyRdOmTdPJkyclSVu2bNHrr7+uVatW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tqjXioqK5OXlpVmzZun777/Xtm3bdOjQIS1ZskTnzp2Tt7e3zfVeXl7Kzs6updaiOpXVF86ePavu3btr7Nix2rFjh5555hm9/vrrWr16dW03G9WkS5cu8vLy0nPPPaecnBz9/vvvWrVqlfU8vxsuLWX1h8OHD/P7wYkQbFGvffzxx/roo490xx13yMPDQ2FhYZo0aZLWr18vb29v5ebm2lyfm5srX1/fWmotqlNZfSEqKkqvvfaaunfvLnd3d3Xq1El33XWXtm/fXtvNRjXx9/fXK6+8oh9++EG9e/fWtGnTNGzYMEmSyWTid8Mlpqz+MHDgQH4/OBGCLeq1P/74wzrr3cLNzU3u7u5q27atEhMTbc4lJSUpLCysJpuIGlJWX/jkk0+0YcMGm3Nms1leXl412UTUILPZrIKCAr322mvas2eP3n77bbm6uio0NFSdOnXid8Mlpqz+sHv3bn4/OBGCLeq16OhopaSk6MUXX1RhYaGOHz+uF154QUOGDNENN9yg1NRUrV27Vvn5+frmm2/0/vvva8SIEbXdbFSDsvqCYRhasGCBvv76axmGofj4eL322msaNWpUbTcb1Wj8+PF65513ZBiGfvzxR7344ou66667+N1wiSqtP/D7wbm4GJbpw0A99dVXX2nx4sU6fPiwGjRooKFDh2rSpEny8PBQQkKC5s2bp19//VWNGjXSxIkTdcstt9R2k1FNyuoLGzZs0Jo1a3Ty5EkFBwfr7rvv1pgxY2q7yahG3377rRYsWKAjR44oKChId911l8aOHStJ/G64BJXVH/j94DwItgAAAHAKlCIAAADAKRBsAQAA4BQItgAAAHAKBFsAAAA4BYItAAAAnALBFgAAAE6BYAsAAACnQLAFAACAU3Cr7QYAgMWRI0f04osv6uuvv9bZs2cVFBSkgQMHasKECfL19a30+xuGoYcffliffvqpGjVqpFtvvVXfffedVq5caff6sWPHqnv37poyZUqlP7sqffrpp3rllVf066+/SpJat26tsWPHavjw4bXcsr+sXr1a+fn5uv/++8u87sSJE+rXr58+/fRTtWjRosT5zZs365///Ke8vb0lSUVFRfLx8VHPnj318MMP6/LLL5ck7dmzR3feead8fHys13l6eqpLly6aPn26wsLCJEmDBw9WcnKyJMlsNkuSPDw8rJ8XHx+vWbNmKSYmRv3796/ktwCgphFsAdQJ+/fvV1xcnOLi4vTuu++qUaNGOnLkiGbPnq24uDi9+eabMplMlfqMU6dOadu2bdq8ebM6dOhQRS2vWfv27dPDDz+sxYsXKzo6WpK0a9cuPfjgg3J1ddXNN99cyy2UDh06pLfeektbt26tkvdr1qyZPvvsM+vr33//XU8//bRuv/12bdmyRY0aNbKei4+Pt/57Wlqali9frtGjR+utt97SlVdeqX//+9/W8zNnzpQkLVy40ObzHnroId16662KjIy0eW8AdR+lCADqhNmzZ2vYsGGaOnWqNUy0adNGixYtUlBQkI4fPy7pfKiZNm2arrvuOkVFRWn69Ok6deqUpPOjdn379tULL7ygmJgY62hrVlaWfvrpJw0YMECSNGbMGC1ZskRLly617hUvSW+//bb69euniIgIzZgxQzk5OdZzhmHotdde04ABAxQZGak77rhDP/74o/V837599dJLL2nYsGGKiIjQsGHD9M0331jPHzx4UGPHjlVERISio6P1/PPPy7KjueVct27d1L9/f61du1al7XYeHx+vpk2bKjY2ViaTSSaTSb169dL06dOVn59vve7999/XTTfdpIiICN14443avn27zX0OHjxYXbp00ZAhQ2wC6NixYzVz5kz16dNHvXv3VlZWlo4dO6a///3v6tGjh/r06aNFixZZRzvtef7553XLLbdYR0L79u2rZcuWacCAAYqIiNCYMWOUlJRU6s+Xp3nz5vp//+//ydXVVWvXri31uqCgIM2ePVuhoaFavny5w+/fsGFDRUVFlTqSD6AOMwCglh09etRo27at8e2335Z5ndlsNvr372889NBDRmZmppGRkWE89NBDxvDhw438/Hzjm2++Mdq2bWs8/vjjRk5OjvHbb78ZUVFRxksvvWQYhmEcP37caNu2rXH8+HHDMAxjyZIlxt/+9jfDMAzjq6++Mjp27Gh89dVXRn5+vrFu3Tqjbdu2xpIlSwzDMIw33njD6N27t/Hzzz8bZrPZePvtt43IyEgjJSXFMAzD6NOnj3HDDTcYv/32m5GdnW3MmDHDGDBggGEYhnHmzBmje/fuxtKlS428vDzj6NGjRmxsrLF+/Xrjzz//NLp27Wq88cYbhtlsNhITE40bbrjBWL9+vd3vIDEx0ejcubMxatQoY9WqVca+ffuM3Nxcm2u++eYbo2PHjsYXX3xhFBYWGjt27DA6dOhgJCYmGps2bTK6dOlifPXVV0ZBQYHx1VdfGV26dDH+85//GIZhGH/729+MmJgY488//zQyMjKMc+fOGX369DGeffZZIzc310hOTjZGjhxpPPvss3bbl5KSYrRv395ITk62HuvTp48RHR1t/PTTT0ZOTo4xa9Yso1+/fobZbC7xTC60adMmo0+fPnbPzZo1y7j11lut99y2bVu717344otGz549SxyfMWOGMWPGDLs/s3fvXqNr165Gfn6+3fMA6iZGbAHUutOnT0uSgoODy7xu3759On78uObMmaMGDRrI399fc+bM0S+//GIzejpp0iR5eXnpiiuuUI8ePXTkyJFy27B161b1799f1113ndzc3HTHHXfo6quvtp5ft26d7r//frVv317u7u4aOXKkQkJCbEY7R44cqSuuuELe3t4aMmSIfvvtN0nS559/Lk9PT02aNEkeHh5q1aqV1qxZo969e2vr1q0KCQnRmDFj5O7urtDQUI0fP17r1q2z287Q0FBt3bpVnTt31ubNmzVmzBhFRkbqoYceUkpKiiTp3XffVf/+/dWrVy+5uroqNjZWb775ppo0aaJNmzZp1KhRuu6662QymXTddddp1KhR2rBhg/UzYmNj1aRJE/n7++uLL76Q2WzWQw89JE9PT11++eV64IEHSm3f3r171bhxY2vtq8X48eN11VVXycvLS48++qj++OMP7d+/v9znUpaGDRsqPT29yq4rrlOnTsrOztbBgwcvrnEAagU1tgBq3WWXXSZJSklJUevWrUucT01NVXBwsNLS0tSwYUP5+flZz/n5+SkwMFC///67NRhb3k+S3N3dS/2zfnEnT54sUXfbsmVL679b6jqfffZZ67GCggJ17NjR+rp4MHdzc7N+bkpKii6//HK5uLhYz1955ZXW9z148KAiIyOt54qKisqsJ27ZsqW1PvTs2bPau3evFi1apAceeEBvvvmmTp06ZRPKpfNBTTr/XRa/L0lq0aKFTQ1r48aNbe779OnT6tatm/WYYRjKz89XWlqagoKCbN4rOTlZTZo0KdHmK664wvrv3t7eCgwMVEpKipo3b17qfZYnLS3NoRpYR68rztPTUw0bNtQff/yha6655mKbCKCGEWwB1LrmzZurbdu22r59u02Aks6Hkj59+mjBggVq3ry5zpw5o6ysLGu4PXv2rM6cOaPLLrvMoQBbmqZNm1rreC3+/PNP62z6pk2baurUqRo8eLD1/LFjxxQYGOjQe//xxx8yDMMabj/55BNlZWWpadOm6tGjh1atWmW9/syZMzp37pzd9xozZow6deqkGTNmSJIaNGigfv36ycXFRdOnT5ckXX755daZ/xarV69W586d1aJFCx07dszm3PHjx23+Y6B4AG/atKlatWqlDz/80HosKyur1LDo6uqqoqKiEsdPnjxp/fdz587pzJkzJUZ1KyI/P1+7du3SLbfcUu61n3/+uXr27FnhzygoKKj0hEUANYtSBAB1wqxZs7Rp0yYtW7ZMZ86ckWEY+vnnn/X3v/9dHTp00IABAxQeHq7Q0FA9/vjjOnv2rM6ePasnnnhCrVq1UpcuXSr1+SNGjNAnn3yizz//XAUFBdqyZYt++OEH6/nbbrtNL7zwgg4dOiRJ2rlzpwYPHqxvv/223Pfu3bu3CgoK9OKLL8psNuvYsWOaP3++8vLyNGTIEH3//ffaunWrCgoKdOrUKf39738vMVPfYujQodqwYYPee+89nT59WkVFRTpy5Ihef/116/JUw4cP18cff6xdu3apqKhIO3fu1NKlS9WgQQONHDlSGzdu1Ndff63CwkJ988032rhxo0aMGGH38/r06aNz585p5cqVMpvNyszM1IwZM/Tggw/aBGCLZs2a2YRYizVr1ujo0aPKycnRggULdOWVVyoiIsJ6PjU1VX/++afNP6U5fvy4pk+fLnd3d911112lXpeSkqInnnhCx44d0+TJk0u9zp68vDxlZmZWKnwDqHmM2AKoE7p376433nhDL774ogYPHqycnBwFBwdr4MCBuv/+++Xu7i5Jeumll7Rw4UINGDBAZrNZPXv21Jo1a+TmVrlfZ127dtW//vUvLVy4UA8++KCuvfZaRUVFWc+PGzdOhmFo4sSJOnXqlJo0aaLZs2erX79+5b63v7+/Vq1apQULFmjNmjXy9vbWmDFjNGrUKEnSypUr9eyzz+qpp56SyWRS79699dhjj9l9r1GjRsnPz09vvPGG5s6dq4KCAjVp0kQ33XST/v73v1vv5emnn9bTTz+t33//3bqKQFhYmMLCwpSVlaWnnnrKWjbwyCOPaNiwYXY/z8/PT2vXrtXChQu1cuVKFRUVqUePHnrhhRfsXn/ttdfq9OnTOn78uE3JQ9euXTVp0iQlJyerW7duevnll+Xq+tfYiuW7KO7AgQOSzpc3WEKwi4uLAgMDFRMTo/Xr1ysgIMDmZ4pf16BBA3Xv3l0bN24sUX5Rnv3796tRo0YlSjoA1G0uRmX+dgcAwAWmTp2qjh076r777pN0frmvyZMnO1Q2UFfMnj1b/v7+evjhh2u7KQAqgFIEAECVeuCBB/T222+XudZtXXb69Gnt2LFD99xzT203BUAFEWwBAFUqJCREt912m82EuPrkueee08yZMx2aGAigbqEUAQAAAE6BEVsAAAA4BYItAAAAnALBFgAAAE6BYAsAAACnQLAFAACAUyDYAgAAwCkQbAEAAOAUCLYAAABwCv8fw5Nd3EQ7WmQAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 800x600 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import pandas as pd\n",
    "\n",
    "plot_data = []\n",
    "\n",
    "for protein_id in confidences.keys():\n",
    "    if protein_id in lddts:\n",
    "        plot_data.append({\n",
    "            'id': protein_id,\n",
    "            'confidence': confidences[protein_id],\n",
    "            'lddt': lddts[protein_id]\n",
    "        })\n",
    "\n",
    "df = pd.DataFrame(plot_data)\n",
    "\n",
    "print(df.head())\n",
    "\n",
    "import seaborn as sns\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "sns.set_style(\"whitegrid\")\n",
    "\n",
    "plt.figure(figsize=(8, 6))\n",
    "\n",
    "scatterplot = sns.scatterplot(data=df, x='confidence', y='lddt')\n",
    "\n",
    "plt.title('Confidence vs. lDDT Score')\n",
    "plt.xlabel('Confidence Score (pLDDT)')\n",
    "plt.ylabel('lDDT-Cα Score')\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "c09819a0-a14d-4a52-86ea-51b3f41e9cca",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.11"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
